/*
* (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.fps;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
import org.openflexo.foundation.FlexoEditor;
import org.openflexo.foundation.FlexoTestCase;
import org.openflexo.foundation.ie.IEOperationComponent;
import org.openflexo.foundation.ie.action.AddTab;
import org.openflexo.foundation.ie.action.DropIEElement;
import org.openflexo.foundation.ie.cl.FlexoComponentFolder;
import org.openflexo.foundation.ie.cl.TabComponentDefinition;
import org.openflexo.foundation.ie.cl.action.AddComponent;
import org.openflexo.foundation.ie.util.WidgetType;
import org.openflexo.foundation.ie.widget.IEBlocWidget;
import org.openflexo.foundation.ie.widget.IEHTMLTableWidget;
import org.openflexo.foundation.ie.widget.IESequenceTab;
import org.openflexo.foundation.rm.FlexoOperationComponentResource;
import org.openflexo.foundation.rm.FlexoProcessResource;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.foundation.rm.FlexoResourceManager;
import org.openflexo.foundation.rm.SaveResourceException;
import org.openflexo.foundation.wkf.WKFElementType;
import org.openflexo.foundation.wkf.action.AddSubProcess;
import org.openflexo.foundation.wkf.action.DropWKFElement;
import org.openflexo.foundation.wkf.action.OpenOperationLevel;
import org.openflexo.foundation.wkf.action.SetAndOpenOperationComponent;
import org.openflexo.foundation.wkf.node.ActivityNode;
import org.openflexo.foundation.wkf.node.OperationNode;
import org.openflexo.foundation.wkf.node.SubProcessNode;
public abstract class FPSTestCase extends FlexoTestCase {
protected static final String TEST_SUB_PROCESS = "TestSubProcess";
protected static final String TEST_SUB_PROCESS_2 = "TestSubProcess2";
protected static final String TEST_SUB_PROCESS_3 = "TestSubProcess3";
protected static final String TEST_SUB_PROCESS_4 = "TestSubProcess4";
protected static final String TEST_OPERATION_NODE_1 = "TestOperation1";
protected static final String TEST_OPERATION_NODE_2 = "TestOperation2";
protected static final String TEST_OPERATION_NODE_3 = "TestOperation3";
protected static final String TEST_OPERATION_NODE_4 = "TestOperation4";
protected static final String OPERATION_COMPONENT_1 = "Operation1";
protected static final String OPERATION_COMPONENT_2 = "Operation2";
protected static final String OPERATION_COMPONENT_3 = "Operation3";
protected static final String TAB_COMPONENT1 = "Tab1";
protected static final String TAB_COMPONENT2 = "Tab2";
public FPSTestCase(String name) {
super(name);
}
protected static final Logger logger = Logger.getLogger(FPSTestCase.class.getPackage().getName());
protected static void savePrj(FlexoProject project) {
try {
project.save();
} catch (SaveResourceException e) {
fail("Cannot save project");
}
}
/**
* Creates a new project in a temp directory
*/
public static FlexoEditor createFPSProject(String projectName) {
FlexoProcessResource _rootProcessResource;
FlexoProcessResource _subProcessResource;
SubProcessNode _subProcessNode;
OperationNode _operationNode;
FlexoOperationComponentResource _operationComponentResource1;
IEOperationComponent _operationComponent1;
IEBlocWidget _bloc2;
TabComponentDefinition _tab1;
TabComponentDefinition _tab2;
FlexoOperationComponentResource _operationComponentResource2;
IEOperationComponent _operationComponent2;
FlexoOperationComponentResource _operationComponentResource3;
IEOperationComponent _operationComponent3;
FlexoEditor editor;
File projectDirectory = null;
String projectIdentifier;
log("test0CreateProject");
try {
File tempFile = File.createTempFile(projectName, "");
projectDirectory = new File(tempFile.getParentFile(), tempFile.getName() + ".prj");
tempFile.delete();
} catch (IOException e) {
fail();
}
logger.info("Project directory: " + projectDirectory.getAbsolutePath());
projectIdentifier = projectDirectory.getName().substring(0, projectDirectory.getName().length() - 4);
logger.info("Project identifier: " + projectIdentifier);
editor = FlexoResourceManager.initializeNewProject(projectDirectory, EDITOR_FACTORY, null);
createSubProcess(projectIdentifier, null, editor);
FlexoProject project = editor.getProject();
logger.info("Project has been SUCCESSFULLY created");
assertNotNull(_rootProcessResource = project.getFlexoProcessResource(projectIdentifier));
AddSubProcess action = AddSubProcess.actionType.makeNewAction(_rootProcessResource.getFlexoProcess(), null, editor);
action.setParentProcess(_rootProcessResource.getFlexoProcess());
action.setNewProcessName(TEST_SUB_PROCESS);
action.doAction();
logger.info("SubProcess " + action.getNewProcess().getName() + " successfully created");
_subProcessResource = project.getFlexoProcessResource(TEST_SUB_PROCESS);
assertNotNull(_subProcessResource);
DropWKFElement dropSubProcessNode = DropWKFElement.actionType.makeNewAction(_rootProcessResource.getFlexoProcess()
.getActivityPetriGraph(), null, editor);
dropSubProcessNode.setElementType(WKFElementType.MULTIPLE_INSTANCE_PARALLEL_SUB_PROCESS_NODE);
dropSubProcessNode.setParameter(DropWKFElement.SUB_PROCESS, _subProcessResource.getFlexoProcess());
dropSubProcessNode.setLocation(100, 100);
dropSubProcessNode.doAction();
assertTrue(dropSubProcessNode.hasActionExecutionSucceeded());
_subProcessNode = (SubProcessNode) dropSubProcessNode.getObject();
logger.info("SubProcessNode " + _subProcessNode.getName() + " successfully created");
savePrj(project);
OpenOperationLevel openOperationLevel = OpenOperationLevel.actionType.makeNewAction(_subProcessNode, null, editor);
openOperationLevel.doAction();
DropWKFElement dropOperation = DropWKFElement.actionType.makeNewAction(_subProcessNode.getOperationPetriGraph(), null, editor);
dropOperation.setElementType(WKFElementType.NORMAL_OPERATION);
dropOperation.setLocation(100, 100);
dropOperation.doAction();
assertTrue(dropOperation.hasActionExecutionSucceeded());
_operationNode = (OperationNode) dropOperation.getObject();
_operationNode.setName(TEST_OPERATION_NODE_1);
logger.info("OperationNode " + _operationNode.getName() + " successfully created");
SetAndOpenOperationComponent setOperationComponent = SetAndOpenOperationComponent.actionType.makeNewAction(_operationNode, null,
editor);
setOperationComponent.setNewComponentName(OPERATION_COMPONENT_1);
setOperationComponent.doAction();
assertTrue(setOperationComponent.hasActionExecutionSucceeded());
_operationComponentResource1 = project.getFlexoOperationComponentResource(OPERATION_COMPONENT_1);
assertNotNull(_operationComponentResource1);
savePrj(project);
_operationComponent1 = _operationComponentResource1.getIEOperationComponent();
assertNotNull(_operationComponent1);
// Insert a new bloc at index 0, name it Bloc1
DropIEElement dropBloc1 = DropIEElement.createBlocInComponent(_operationComponent1, 0, editor);
assertTrue(dropBloc1.doAction().hasActionExecutionSucceeded());
IEBlocWidget bloc1 = (IEBlocWidget) dropBloc1.getDroppedWidget();
assertNotNull(bloc1);
bloc1.setTitle("Bloc1");
// Insert a new bloc at index 1, name it Bloc2
DropIEElement dropBloc2 = DropIEElement.createBlocInComponent(_operationComponent1, 1, editor);
assertTrue(dropBloc2.doAction().hasActionExecutionSucceeded());
_bloc2 = (IEBlocWidget) dropBloc2.getDroppedWidget();
assertNotNull(_bloc2);
_bloc2.setTitle("Bloc2");
// Insert a new bloc at index 1, name it Bloc3
// This bloc is therefore placed between Bloc1 and Bloc2
DropIEElement dropBloc3 = DropIEElement.createBlocInComponent(_operationComponent1, 1, editor);
assertTrue(dropBloc3.doAction().hasActionExecutionSucceeded());
IEBlocWidget bloc3 = (IEBlocWidget) dropBloc3.getDroppedWidget();
assertNotNull(bloc3);
bloc3.setTitle("Bloc3");
// Drop a table in the bloc2
DropIEElement dropTable = DropIEElement.createTableInBloc(_bloc2, editor);
assertTrue(dropTable.doAction().hasActionExecutionSucceeded());
IEHTMLTableWidget table = (IEHTMLTableWidget) dropTable.getDroppedWidget();
assertNotNull(table);
// Drop a label in the table, at cell (0,0) at position 0
DropIEElement dropLabel = DropIEElement.insertWidgetInTable(table, WidgetType.LABEL, 0, 0, 0, editor);
assertTrue(dropLabel.doAction().hasActionExecutionSucceeded());
// Drop a TextField in the table, at cell (0,1) at position 0
DropIEElement dropTF = DropIEElement.insertWidgetInTable(table, WidgetType.TEXTFIELD, 0, 1, 0, editor);
assertTrue(dropTF.doAction().hasActionExecutionSucceeded());
// Now, drop a TabsContainer
DropIEElement dropTabs = DropIEElement.createTabsInComponent(_operationComponent1, 3, editor);
assertTrue(dropTabs.doAction().hasActionExecutionSucceeded());
IESequenceTab tabs = (IESequenceTab) dropTabs.getDroppedWidget();
FlexoComponentFolder rootFolder = project.getFlexoComponentLibrary().getRootFolder();
// Put Tab1 inside
AddTab addTab1 = AddTab.actionType.makeNewAction(tabs, null, editor);
addTab1.setFolder(rootFolder);
addTab1.setTabTitle("Tab1Title");
addTab1.setTabName(TAB_COMPONENT1);
addTab1.setTabContainer(tabs);
assertTrue(addTab1.doAction().hasActionExecutionSucceeded());
_tab1 = addTab1.getTabDef();
// Put Tab2 inside
AddTab addTab2 = AddTab.actionType.makeNewAction(tabs, null, editor);
addTab2.setFolder(rootFolder);
addTab2.setTabTitle("Tab2Title");
addTab2.setTabName(TAB_COMPONENT2);
addTab2.setTabContainer(tabs);
assertTrue(addTab2.doAction().hasActionExecutionSucceeded());
_tab2 = addTab2.getTabDef();
AddComponent addComponent = AddComponent.actionType.makeNewAction(project.getFlexoComponentLibrary(), null, editor);
addComponent.setNewComponentName(OPERATION_COMPONENT_2);
addComponent.setComponentType(AddComponent.ComponentType.OPERATION_COMPONENT);
addComponent.doAction();
assertTrue(addComponent.hasActionExecutionSucceeded());
_operationComponentResource2 = project.getFlexoOperationComponentResource(OPERATION_COMPONENT_2);
assertNotNull(_operationComponentResource2);
_operationComponent2 = _operationComponentResource2.getIEOperationComponent();
assertNotNull(_operationComponent2);
// Insert a new bloc at index 0, name it Bloc1
DropIEElement dropBloc1InOp2 = DropIEElement.createBlocInComponent(_operationComponent2, 0, editor);
assertTrue(dropBloc1InOp2.doAction().hasActionExecutionSucceeded());
IEBlocWidget bloc1InOp2 = (IEBlocWidget) dropBloc1InOp2.getDroppedWidget();
assertNotNull(bloc1InOp2);
bloc1InOp2.setTitle("NewBloc");
// Now, drop a TabsContainer
DropIEElement dropTabsInOp2 = DropIEElement.createTabsInComponent(_operationComponent2, 1, editor);
assertTrue(dropTabsInOp2.doAction().hasActionExecutionSucceeded());
IESequenceTab tabsInOp2 = (IESequenceTab) dropTabsInOp2.getDroppedWidget();
// Put Tab1 inside
AddTab addTab1InTabs = AddTab.actionType.makeNewAction(tabsInOp2, null, editor);
addTab1InTabs.setFolder(rootFolder);
addTab1InTabs.setTabTitle("Tab1Title");
addTab1InTabs.setTabDef(_tab1);
addTab1InTabs.setTabContainer(tabsInOp2);
assertTrue(addTab1InTabs.doAction().hasActionExecutionSucceeded());
AddComponent addComponent3 = AddComponent.actionType.makeNewAction(project.getFlexoComponentLibrary(), null, editor);
addComponent3.setNewComponentName(OPERATION_COMPONENT_3);
addComponent3.setComponentType(AddComponent.ComponentType.OPERATION_COMPONENT);
addComponent3.doAction();
assertTrue(addComponent3.hasActionExecutionSucceeded());
_operationComponentResource3 = project.getFlexoOperationComponentResource(OPERATION_COMPONENT_3);
assertNotNull(_operationComponentResource3);
_operationComponent3 = _operationComponentResource3.getIEOperationComponent();
assertNotNull(_operationComponent3);
// Insert a new bloc at index 0, name it Bloc1
DropIEElement dropBloc1InOp3 = DropIEElement.createBlocInComponent(_operationComponent3, 0, editor);
assertTrue(dropBloc1InOp3.doAction().hasActionExecutionSucceeded());
IEBlocWidget bloc1InOp3 = (IEBlocWidget) dropBloc1InOp3.getDroppedWidget();
assertNotNull(bloc1InOp3);
bloc1InOp3.setTitle("NewBloc");
// Now, drop a TabsContainer
DropIEElement dropTabsInOp3 = DropIEElement.createTabsInComponent(_operationComponent3, 1, editor);
assertTrue(dropTabsInOp3.doAction().hasActionExecutionSucceeded());
IESequenceTab tabsInOp3 = (IESequenceTab) dropTabsInOp3.getDroppedWidget();
// Put Tab2 inside
AddTab addTab2InOp3 = AddTab.actionType.makeNewAction(tabsInOp3, null, editor);
addTab2InOp3.setFolder(rootFolder);
addTab2InOp3.setTabTitle("Tab2Title");
addTab2InOp3.setTabDef(_tab2);
addTab2InOp3.setTabContainer(tabsInOp3);
assertTrue(addTab2InOp3.doAction().hasActionExecutionSucceeded());
DropWKFElement addActivity = DropWKFElement.actionType.makeNewAction(_subProcessResource.getFlexoProcess().getActivityPetriGraph(),
null, editor);
addActivity.setElementType(WKFElementType.NORMAL_ACTIVITY);
addActivity.setLocation(100, 100);
addActivity.doAction();
assertTrue(addActivity.hasActionExecutionSucceeded());
ActivityNode activityNode = (ActivityNode) addActivity.getObject();
logger.info("ActivityNode " + activityNode.getName() + " successfully created");
OpenOperationLevel openOperationLevelInSubProcess = OpenOperationLevel.actionType.makeNewAction(activityNode, null, editor);
openOperationLevelInSubProcess.doAction();
DropWKFElement dropOperation2 = DropWKFElement.actionType.makeNewAction(activityNode.getOperationPetriGraph(), null, editor);
dropOperation2.setElementType(WKFElementType.NORMAL_OPERATION);
dropOperation2.setLocation(10, 50);
dropOperation2.doAction();
assertTrue(dropOperation2.hasActionExecutionSucceeded());
OperationNode operationNode2 = (OperationNode) dropOperation2.getObject();
operationNode2.setName(TEST_OPERATION_NODE_2);
logger.info("OperationNode " + operationNode2.getName() + " successfully created");
SetAndOpenOperationComponent setOperationComponent2 = SetAndOpenOperationComponent.actionType.makeNewAction(operationNode2, null,
editor);
setOperationComponent2.setNewComponentName(OPERATION_COMPONENT_2);
setOperationComponent2.doAction();
assertTrue(setOperationComponent2.hasActionExecutionSucceeded());
DropWKFElement dropOperation3 = DropWKFElement.actionType.makeNewAction(activityNode.getOperationPetriGraph(), null, editor);
dropOperation3.setElementType(WKFElementType.NORMAL_OPERATION);
dropOperation3.setLocation(100, 50);
dropOperation3.doAction();
assertTrue(dropOperation3.hasActionExecutionSucceeded());
OperationNode operationNode3 = (OperationNode) dropOperation3.getObject();
operationNode3.setName(TEST_OPERATION_NODE_3);
logger.info("OperationNode " + operationNode3.getName() + " successfully created");
SetAndOpenOperationComponent setOperationComponent3 = SetAndOpenOperationComponent.actionType.makeNewAction(operationNode3, null,
editor);
setOperationComponent3.setNewComponentName(OPERATION_COMPONENT_3);
setOperationComponent3.doAction();
assertTrue(setOperationComponent3.hasActionExecutionSucceeded());
savePrj(project);
return editor;
}
}