/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.components.barchart.basechart;
import java.io.Serializable;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.JPanel;
import com.opendoorlogistics.api.ODLApi;
import com.opendoorlogistics.api.components.ComponentConfigurationEditorAPI;
import com.opendoorlogistics.api.components.ComponentControlLauncherApi;
import com.opendoorlogistics.api.components.ComponentControlLauncherApi.ControlLauncherCallback;
import com.opendoorlogistics.api.components.ComponentExecutionApi;
import com.opendoorlogistics.api.components.ODLComponent;
import com.opendoorlogistics.api.scripts.ScriptTemplatesBuilder;
import com.opendoorlogistics.api.tables.ODLColumnType;
import com.opendoorlogistics.api.tables.ODLDatastore;
import com.opendoorlogistics.api.tables.ODLDatastoreAlterable;
import com.opendoorlogistics.api.tables.ODLTable;
import com.opendoorlogistics.api.tables.ODLTableAlterable;
import com.opendoorlogistics.api.tables.ODLTableDefinition;
import com.opendoorlogistics.api.tables.ODLTableDefinitionAlterable;
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
import com.opendoorlogistics.api.tables.TableFlags;
import com.opendoorlogistics.utils.ui.Icons;
public abstract class BaseComponent implements ODLComponent {
@Override
public ODLDatastore<? extends ODLTableDefinition> getOutputDsDefinition(ODLApi api, int mode, Serializable configuration) {
return null;
}
@Override
public void execute(final ComponentExecutionApi reporter, int mode, final Object configuration, final ODLDatastore<? extends ODLTable> ioDb, ODLDatastoreAlterable<? extends ODLTableAlterable> outputDb) {
final BaseConfig bc = (BaseConfig)configuration;
int nbMax=20;
if(bc.getNbFilterGroupLevels()< 0 || bc.getNbFilterGroupLevels() > nbMax){
throw new RuntimeException("Invalid number of filter group levels: " + bc.getNbFilterGroupLevels() + ". Number must be between 0 and " + nbMax + ".");
}
reporter.submitControlLauncher(new ControlLauncherCallback() {
@Override
public void launchControls(ComponentControlLauncherApi launcherApi) {
ODLTableReadOnly table = ioDb.getTableAt(0);
String panelId = "ChartPanel";
JPanel panel = launcherApi.getRegisteredPanel(panelId);
if(panel!=null){
((BaseChartPanel)panel).update(bc,table);
}
else{
launcherApi.registerPanel(panelId, null, createPanel(reporter.getApi(),bc,table), true);
}
}
});
}
protected void addFilterGroupsToIODs(ODLTableDefinitionAlterable table,
BaseConfig config) {
for(int i =0 ; i < config.getNbFilterGroupLevels() ; i++){
table.addColumn(-1, "FilterGroup" + (i+1), ODLColumnType.STRING, TableFlags.FLAG_IS_OPTIONAL);
}
}
protected abstract BaseChartPanel createPanel(ODLApi api,BaseConfig config,ODLTableReadOnly table);
@Override
public long getFlags(ODLApi api, int mode) {
return ODLComponent.FLAG_OUTPUT_WINDOWS_CAN_BE_SYNCHRONISED | ODLComponent.FLAG_ALLOW_USER_INTERACTION_WHEN_RUNNING;
}
@Override
public boolean isModeSupported(ODLApi api, int mode) {
return mode == ODLComponent.MODE_DEFAULT;
}
}