/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo 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.
*
* OpenFlexo 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 OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.components.widget;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import org.openflexo.components.widget.binding.BindingSelector;
import org.openflexo.fib.utils.FlexoLoggingViewer;
import org.openflexo.foundation.DefaultFlexoEditor;
import org.openflexo.foundation.FlexoEditor;
import org.openflexo.foundation.FlexoEditor.FlexoEditorFactory;
import org.openflexo.foundation.bindings.AbstractBinding;
import org.openflexo.foundation.bindings.Bindable;
import org.openflexo.foundation.bindings.BindingDefinition;
import org.openflexo.foundation.bindings.BindingDefinition.BindingDefinitionType;
import org.openflexo.foundation.bindings.BindingValue;
import org.openflexo.foundation.dm.DMType;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.rm.FlexoResourceManager;
import org.openflexo.foundation.utils.ProjectInitializerException;
import org.openflexo.foundation.utils.ProjectLoadingCancelledException;
import org.openflexo.foundation.wkf.FlexoProcess;
import org.openflexo.foundation.wkf.node.ActivityNode;
import org.openflexo.foundation.wkf.node.IFOperator;
import org.openflexo.foundation.wkf.node.OperationNode;
import org.openflexo.logging.FlexoLogger;
import org.openflexo.logging.FlexoLoggingManager;
import org.openflexo.swing.DateSelector;
import org.openflexo.swing.VerticalLayout;
import org.openflexo.toolbox.FileResource;
public class TestBindingExpressionSelector {
private static final Logger logger = FlexoLogger.getLogger(TestBindingExpressionSelector.class.getPackage().getName());
private FlexoEditor _editor;
private FlexoProject _project;
private FlexoProcess process;
private IFOperator operatorIF;
private ActivityNode activity1;
private OperationNode operation1;
protected static final FlexoEditorFactory EDITOR_FACTORY = new FlexoEditorFactory() {
@Override
public DefaultFlexoEditor makeFlexoEditor(FlexoProject project) {
return new DefaultFlexoEditor(project);
}
};
public static void main(String[] args) {
try {
FlexoLoggingManager.initialize(-1, true, null, Level.INFO, null);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TestBindingExpressionSelector test = new TestBindingExpressionSelector();
test.loadProject();
test.showPanel();
}
public void loadProject() {
FileResource projectFile = new FileResource("src/test/resources/TestExecutionModel.prj");
logger.info("Found project " + projectFile.getAbsolutePath());
try {
_editor = FlexoResourceManager.initializeExistingProject(projectFile, EDITOR_FACTORY, null);
} catch (ProjectLoadingCancelledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProjectInitializerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
_project = _editor.getProject();
logger.info("Successfully loaded project " + projectFile.getAbsolutePath());
process = _project.getFlexoWorkflow().getRootProcess();
operatorIF = (IFOperator) process.getActivityPetriGraph().getOperatorNodeNamed("IF");
activity1 = process.getActivityPetriGraph().getActivityNodeNamed("Activity1");
operation1 = activity1.getOperationNodeNamed("Operation1");
System.out.println("Operateur: " + operatorIF);
}
public void showPanel() {
final JDialog dialog = new JDialog((Frame) null, false);
JButton closeButton = new JButton("Close");
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
System.exit(0);
}
});
JButton logButton = new JButton("Logs");
logButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FlexoLoggingViewer.showLoggingViewer(FlexoLoggingManager.instance(), dialog);
}
});
AbstractBinding bv = operatorIF.getConditionPrimitive();
BindingSelector _selector = new BindingSelector(null) {
@Override
public void apply() {
super.apply();
System.out.println("Apply, getEditedObject()=" + getEditedObject());
}
@Override
public void cancel() {
super.cancel();
System.out.println("Cancel, getEditedObject()=" + getEditedObject());
}
};
_selector.setBindable((Bindable) bv.getOwner());
_selector.setBindingDefinition(bv.getBindingDefinition());
_selector.setEditedObject(bv);
_selector.setRevertValue(bv.clone());
AbstractBinding bv1 = operation1.getComponentInstance().getBindings().firstElement().getBindingValue();
BindingSelector selector1 = new BindingSelector(bv1);
selector1.setEditedObject(bv1);
selector1.setRevertValue(bv1.clone());
BindingDefinition def2 = new BindingDefinition("aBoolean", DMType.makeBooleanDMType(_project), operatorIF,
BindingDefinitionType.GET, true);
BindingValue bv2 = new BindingValue(def2, operatorIF);
BindingSelector selector2 = new BindingSelector(bv2);
BindingDefinition def2bis = new BindingDefinition("aMethod", null, operatorIF, BindingDefinitionType.EXECUTE, true);
BindingValue bv2bis = new BindingValue(def2bis, operatorIF);
BindingSelector selector2bis = new BindingSelector(bv2bis);
selector2bis.activateCompoundBindingMode();
BindingDefinition def2ter = new BindingDefinition("aSetBV", DMType.makeBooleanDMType(_project), operatorIF,
BindingDefinitionType.SET, true);
BindingValue bv2ter = new BindingValue(def2ter, operatorIF);
BindingSelector selector2ter = new BindingSelector(bv2ter);
BindingDefinition def3 = new BindingDefinition("anInteger", DMType.makeLongDMType(_project), operatorIF, BindingDefinitionType.GET,
true);
BindingValue bv3 = new BindingValue(def3, operatorIF);
BindingSelector selector3 = new BindingSelector(bv3);
BindingDefinition def4 = new BindingDefinition("aFloat", DMType.makeDoubleDMType(_project), operatorIF, BindingDefinitionType.GET,
true);
BindingValue bv4 = new BindingValue(def4, operatorIF);
BindingSelector selector4 = new BindingSelector(bv4);
BindingDefinition def5 = new BindingDefinition("aString", DMType.makeStringDMType(_project), operatorIF, BindingDefinitionType.GET,
true);
BindingValue bv5 = new BindingValue(def5, operatorIF);
BindingSelector selector5 = new BindingSelector(bv5) {
@Override
public String toString() {
// TODO Auto-generated method stub
return "TEST";
}
};
BindingDefinition def6 = new BindingDefinition("aDate", DMType.makeDateDMType(_project), operatorIF, BindingDefinitionType.GET,
true);
BindingValue bv6 = new BindingValue(def6, operatorIF);
BindingSelector selector6 = new BindingSelector(bv6);
BindingDefinition def7 = new BindingDefinition("aDuration", DMType.makeDurationDMType(_project), operatorIF,
BindingDefinitionType.GET, true);
BindingValue bv7 = new BindingValue(def7, operatorIF);
BindingSelector selector7 = new BindingSelector(bv7);
BindingDefinition def8 = new BindingDefinition("anObject", DMType.makeObjectDMType(_project), operatorIF,
BindingDefinitionType.GET, true);
BindingValue bv8 = new BindingValue(def8, operatorIF);
BindingSelector selector8 = new BindingSelector(bv8);
JPanel panel = new JPanel(new VerticalLayout());
panel.add(_selector);
panel.add(selector1);
panel.add(selector2);
panel.add(selector2bis);
panel.add(selector2ter);
panel.add(selector3);
panel.add(selector4);
panel.add(selector5);
panel.add(selector6);
panel.add(selector7);
panel.add(selector8);
panel.add(new DateSelector(new Date()));
final KeySelector keySelector = new KeySelector(_project, null);
panel.add(new DomainSelector(_project, null) {
@Override
public void apply() {
super.apply();
keySelector.setDomain(getEditedObject());
}
});
panel.add(keySelector);
panel.add(new DMTypeSelector(_project, null, true));
BindingDefinition def9 = new BindingDefinition("aDKV", DMType.makeDKVDMType(_project.getDKVModel().getDomains().elementAt(1)),
operatorIF, BindingDefinitionType.GET, true);
BindingValue bv9 = new BindingValue(def9, operatorIF);
BindingSelector selector9 = new BindingSelector(bv9);
panel.add(selector9);
panel.add(closeButton);
panel.add(logButton);
dialog.setPreferredSize(new Dimension(550, 600));
dialog.getContentPane().add(panel);
dialog.validate();
dialog.pack();
dialog.setVisible(true);
}
}