/* * * Goko * Copyright (C) 2013 PsyKo * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.goko.tools.dro; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.goko.core.common.exception.GkException; import org.goko.core.common.service.AbstractGokoService; import org.goko.core.controller.IControllerService; import org.goko.core.controller.bean.MachineValueDefinition; import org.goko.core.log.GkLog; import org.goko.tools.dro.preferences.DROPreferences; public class DROServiceImpl extends AbstractGokoService implements IDROService, IPropertyChangeListener{ private static final GkLog LOG = GkLog.getLogger(DROServiceImpl.class); public static final String SERVICE_ID = "org.goko.tools.dro.service"; private IControllerService controllerService; private List<MachineValueDefinition> lstDefinition; /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#getServiceId() */ @Override public String getServiceId() throws GkException { return SERVICE_ID; } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#start() */ @Override public void startService() throws GkException { lstDefinition = new ArrayList<MachineValueDefinition>(); DROPreferences.getInstance().addPropertyChangeListener(this); updateValues(); } /** (inheritDoc) * @see org.goko.core.common.service.IGokoService#stop() */ @Override public void stopService() throws GkException { } /** (inheritDoc) * @see org.goko.tools.dro.IDROService#getDisplayedMachineValueDefinition() */ @Override public List<MachineValueDefinition> getDisplayedMachineValueDefinition() throws GkException{ return lstDefinition; } /** (inheritDoc) * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ @Override public void propertyChange(PropertyChangeEvent event) { updateValues(); } private void updateValues() { String[] token = StringUtils.split(DROPreferences.getInstance().getString(DROPreferences.KEY_DISPLAYED_VALUES), DROPreferences.DISPLAYED_VALUES_SEPARATOR); String updatedValue = StringUtils.EMPTY; lstDefinition.clear(); if(token != null && token.length > 0){ for (String string : token) { try { MachineValueDefinition val = controllerService.findMachineValueDefinition(string); if(val != null){ lstDefinition.add(val); // Confirm existence updatedValue += string+DROPreferences.DISPLAYED_VALUES_SEPARATOR; } } catch (GkException e) { LOG.error(e); } } // Memorize only existing machine values. We use the put method to prevent firing an update event DROPreferences.getInstance().putValue(DROPreferences.KEY_DISPLAYED_VALUES, updatedValue); } } /** * @return the controllerService */ public IControllerService getControllerService() { return controllerService; } /** * @param controllerService the controllerService to set */ public void setControllerService(IControllerService controllerService) { this.controllerService = controllerService; } }