001 /*
002 * Copyright 2011 Christian Kumpe http://kumpe.de/christian/java
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package de.kumpe.hadooptimizer.jeneva;
017
018 import java.util.Collection;
019
020 import de.kumpe.hadooptimizer.EaOptimizerConfiguration;
021 import de.kumpe.hadooptimizer.Optimizer;
022 import de.kumpe.hadooptimizer.OptimizerException;
023 import de.kumpe.hadooptimizer.jeneva.server.JenevaServer;
024 import de.kumpe.hadooptimizer.jeneva.server.ServerService;
025 import de.kumpe.hadooptimizer.jeneva.server.ServerTask;
026 import de.kumpe.hadooptimizer.jeneva.server.ServerTaskStarter;
027
028 public class EaJenevaOptimizer<I> extends Optimizer<I> {
029 private final static class EaOptimizerServerTaskStarter<I> extends
030 ServerTaskStarter<Collection<I>> {
031 private static final long serialVersionUID = 1L;
032
033 private final EaOptimizerConfiguration<I> configuration;
034
035 public EaOptimizerServerTaskStarter(
036 final EaOptimizerConfiguration<I> configuration) {
037 this.configuration = configuration;
038 }
039
040 @Override
041 protected ServerTask<Collection<I>> createServerTask() {
042 return new EaOptimizerServerTask<I>(configuration);
043 }
044 }
045
046 public EaJenevaOptimizer(final EaOptimizerConfiguration<I> configuration) {
047 super(configuration);
048 }
049
050 @Override
051 protected EaOptimizerConfiguration<I> getConfiguration() {
052 return (EaOptimizerConfiguration<I>) super.getConfiguration();
053 }
054
055 @Override
056 public void optimize() {
057 try {
058 final ServerService serverService = JenevaServer.getServerService();
059
060 final EaOptimizerServerTaskStarter<I> task = new EaOptimizerServerTaskStarter<I>(
061 getConfiguration());
062 getConfiguration().getPopulationWriter().write(
063 serverService.execute(task));
064 } catch (final Exception e) {
065 throw new OptimizerException("optimization failed", e);
066 }
067 }
068 }