/*******************************************************************************
* 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.tables.creator;
import java.io.Serializable;
import javax.swing.Icon;
import javax.swing.JPanel;
import com.opendoorlogistics.api.ODLApi;
import com.opendoorlogistics.api.components.ComponentConfigurationEditorAPI;
import com.opendoorlogistics.api.components.ComponentExecutionApi;
import com.opendoorlogistics.api.components.ODLComponent;
import com.opendoorlogistics.api.scripts.ScriptTemplatesBuilder;
import com.opendoorlogistics.api.standardcomponents.TableCreator;
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.core.components.ODLWizardTemplateConfig;
import com.opendoorlogistics.core.tables.memory.ODLTableDefinitionImpl;
import com.opendoorlogistics.core.tables.utils.DatastoreCopier;
import com.opendoorlogistics.core.tables.utils.TableUtils;
import com.opendoorlogistics.utils.ui.Icons;
final public class CreateTablesComponent implements TableCreator{
@Override
public String getId() {
return "com.opendoorlogistics.components.tables.creator.CreateTablesComponent";
}
@Override
public String getName() {
return "Create tables";
}
@Override
public ODLDatastore<? extends ODLTableDefinition> getIODsDefinition(ODLApi api,Serializable configuration) {
return null;
}
@Override
public ODLDatastore<? extends ODLTableDefinition> getOutputDsDefinition(ODLApi api,int mode, Serializable configuration) {
ODLDatastoreAlterable<? extends ODLTableDefinitionAlterable> ret =api.tables().createAlterableDs();
for(ODLTableDefinition table : ((DatastoreConfig)configuration).getTables()){
if(TableUtils.findTable(ret, table.getName())==null){
DatastoreCopier.copyTableDefinition(table, ret);
}
}
return ret;
}
@Override
public void execute(ComponentExecutionApi reporter,int mode,Object configuration, ODLDatastore<? extends ODLTable> ioDb, ODLDatastoreAlterable<? extends ODLTableAlterable> outputDb) {
// execute does nothing as the tables will already be made by the executor engine!!
}
@Override
public Class<? extends Serializable> getConfigClass() {
return DatastoreConfig.class;
}
@Override
public JPanel createConfigEditorPanel(ComponentConfigurationEditorAPI factory,int mode,Serializable config, boolean isFixedIO) {
return new DatastoreEditorPanel((DatastoreConfig)config,false);
}
@Override
public void registerScriptTemplates(final ScriptTemplatesBuilder templatesApi) {
class Helper{
void create(String s, int nb){
DatastoreConfig conf = new DatastoreConfig();
for(int i = 1 ; i <=nb ; i++){
ODLTableDefinitionImpl table = new ODLTableDefinitionImpl(-1, "Table" + i);
conf.getTables().add(table);
}
templatesApi.registerTemplate(s, s, s,getIODsDefinition(templatesApi.getApi(), conf), conf, ODLWizardTemplateConfig.STANDARD_FLAGS & (~ODLWizardTemplateConfig.FLAG_OUTPUT_DATASTORE_IS_FIXED),ODLComponent.MODE_DEFAULT);
}
}
Helper helper = new Helper();
helper.create("Create one table", 1);
helper.create("Create two tables", 2);
helper.create("Create three tables", 3);
}
/**
* Create template config for creating the input datastore
* @param ds
* @return
*/
public static ODLWizardTemplateConfig createTemplateConfig(ODLDatastore<? extends ODLTableDefinition> ds){
DatastoreConfig conf = new DatastoreConfig();
for(int i = 0 ; i < ds.getTableCount() ; i++){
ODLTableDefinition src = ds.getTableAt(i);
ODLTableDefinitionImpl table = new ODLTableDefinitionImpl(src.getImmutableId(), src.getName());
DatastoreCopier.copyTableDefinition(src, table);
conf.getTables().add(table);
}
return new ODLWizardTemplateConfig("", "", "",null, conf, ODLWizardTemplateConfig.STANDARD_FLAGS & (~ODLWizardTemplateConfig.FLAG_OUTPUT_DATASTORE_IS_FIXED),ODLComponent.MODE_DEFAULT,null);
}
@Override
public long getFlags(ODLApi api,int mode) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Icon getIcon(ODLApi api,int mode) {
return Icons.loadFromStandardPath("table-add.png");
}
@Override
public boolean isModeSupported(ODLApi api,int mode) {
return mode==ODLComponent.MODE_DEFAULT;
}
@Override
public Serializable createConfiguration(ODLApi api,ODLTableDefinition ...outputTables) {
DatastoreConfig ret = new DatastoreConfig();
for(ODLTableDefinition outputTable : outputTables){
ODLTableDefinitionImpl impl = new ODLTableDefinitionImpl();
DatastoreCopier.copyTableDefinition(outputTable, impl);
impl.setName(outputTable.getName());
ret.getTables().add(impl);
}
return ret;
}
}