package org.visico.neighborhoodpss.gwt.server.project; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Set; import org.visico.neighborhoodpss.domain.project.BuildingDataTypeDTO; import org.visico.neighborhoodpss.domain.project.ProjectDTO; import org.visico.neighborhoodpss.domain.project.ScenarioDTO; import org.visico.neighborhoodpss.gwt.client.IndicatorService; import org.visico.neighborhoodpss.gwt.shared.dto.IndicatorDTO; import org.visico.neighborhoodpss.plugin.IndicatorManager; import org.visico.neighborhoodpss.plugin.domain.BuildingProperty; import org.visico.neighborhoodpss.plugin.domain.Plugin; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * The server side implementation of the RPC service. */ @SuppressWarnings("serial") public class IndicatorServiceImpl extends RemoteServiceServlet implements IndicatorService { IndicatorManager manager = null; static String pathToIndicators = "plugins/"; @Override public ArrayList<IndicatorDTO> getIndicatorList(ProjectDTO project) { if (manager == null) manager = new IndicatorManager(project); ArrayList<IndicatorDTO> indicators = new ArrayList<IndicatorDTO>(); System.out.println("IndicatorServiceImpl:getIndicatorList - finding indicators from " + getServletContext().getRealPath("/WEB-INF/" + pathToIndicators)); for (Plugin indInfo : manager.availableIndicators(getServletContext().getRealPath("/WEB-INF/" + pathToIndicators))) { IndicatorDTO indicatordto = new IndicatorDTO(indInfo.getName(), indInfo.getDescription(), indInfo.getAuthor(), indInfo.getVersion(), indInfo.getClassName()); for (BuildingProperty bp : indInfo.getData().getBuildingProperty() ) { BuildingDataTypeDTO dt = new BuildingDataTypeDTO(); dt.setDefault_val(bp.getDefault()); dt.setMaximum(Double.parseDouble(bp.getMax())); dt.setMinimum(Double.parseDouble(bp.getMin())); dt.setName(bp.getName()); dt.setType(bp.getType()); indicatordto.getBuildingDataTypes().add(dt); } if (manager.getPlugins().containsKey(indInfo.getClassName())) indicatordto.setActivated(true); indicators.add(indicatordto); } return indicators; } @Override public String activateIndicator(ProjectDTO project, String indicatorName) { try { if (manager == null) manager = new IndicatorManager(project); manager.initIndicatorByIndicatorName(indicatorName, getServletContext().getRealPath("/WEB-INF/" + pathToIndicators), IndicatorServiceImpl.class.getClassLoader()); return "Indicator " + indicatorName + " activated!"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return "Indicator " + indicatorName + " activation failed!"; } } @Override public String deactivateIndicator(ProjectDTO project, String indicatorName) { try { if (manager == null) manager = new IndicatorManager(project); manager.unregisterIndicatorByIndicatorName(indicatorName, getServletContext().getRealPath("/WEB-INF/" + pathToIndicators)); return "Indicator " + indicatorName + " deactivated!"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return "Indicator " + indicatorName + " activation failed!"; } } @Override public Set<String> buildingDataTypes(ProjectDTO project) { if (manager == null) manager = new IndicatorManager(project); return manager.getBuildingDataTypes(); } @Override public String caluclateIndicator(ScenarioDTO scenario, IndicatorDTO ind) { try { if (manager == null) return "No indicator manager set for this project"; for (String indStr : manager.getPlugins().keySet()) { if (indStr.equals(ind.getClassName())) { manager.getPlugins().get(indStr).calculate(scenario); return "Indicator " + ind.getName() + " calculated!"; } } return "Indicator " + ind.getName() + " not activated!"; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return "Indicator " + ind.getName() + " calculation failed!"; } } }