123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package at.acdp.urweb.pickorplace;
- import com.ur.urcap.api.contribution.ProgramNodeContribution;
- import com.ur.urcap.api.contribution.program.CreationContext;
- import com.ur.urcap.api.contribution.program.CreationContext.NodeCreationType;
- import com.ur.urcap.api.contribution.program.ProgramAPIProvider;
- import com.ur.urcap.api.domain.ProgramAPI;
- import com.ur.urcap.api.domain.data.DataModel;
- import com.ur.urcap.api.domain.program.ProgramModel;
- import com.ur.urcap.api.domain.program.nodes.ProgramNodeFactory;
- import com.ur.urcap.api.domain.program.structure.TreeNode;
- import com.ur.urcap.api.domain.program.structure.TreeStructureException;
- import com.ur.urcap.api.domain.script.ScriptWriter;
- import com.ur.urcap.api.domain.undoredo.UndoableChanges;
- import at.acdp.urweb.close.GripperCloseProgramNodeService;
- import at.acdp.urweb.open.GripperOpenProgramNodeService;
- public class PickOrPlaceProgramNodeContribution implements ProgramNodeContribution {
- private static final String TEMPLATE_KEY = "templateType";
- private final ProgramAPIProvider apiProvider;
- private final PickOrPlaceProgramNodeView view;
- private final DataModel model;
- public PickOrPlaceProgramNodeContribution(ProgramAPIProvider apiProvider, PickOrPlaceProgramNodeView view,
- DataModel model, CreationContext context) {
- this.apiProvider = apiProvider;
- this.view = view;
- this.model = model;
- lockChildSequence(apiProvider);
- if (context.getNodeCreationType() == NodeCreationType.NEW) {
- this.setModel(TemplateType.EMPTY.getName());
- }
- }
- @Override
- public String getTitle() {
- return getTemplateType().getName();
- }
- @Override
- public void openView() {
- this.view.update(this);
- }
- @Override
- public void closeView() {
- }
- @Override
- public boolean isDefined() {
- return true;
- }
- @Override
- public void generateScript(ScriptWriter writer) {
- writer.writeChildren();
- }
- private void setModel(final String variable) {
- model.set(TEMPLATE_KEY, variable);
- }
- public void reset() {
- apiProvider.getProgramAPI().getUndoRedoManager().recordChanges(new UndoableChanges() {
- @Override
- public void executeChanges() {
- setModel(TemplateType.EMPTY.getName());
- clearSubtree();
- view.update(PickOrPlaceProgramNodeContribution.this);
- }
- });
- }
- public void createPick() {
- apiProvider.getProgramAPI().getUndoRedoManager().recordChanges(new UndoableChanges() {
- @Override
- public void executeChanges() {
- setModel(TemplateType.PICK.getName());
- createSubtree(TemplateType.PICK);
- view.update(PickOrPlaceProgramNodeContribution.this);
- }
- });
- }
- public void createPlace() {
- apiProvider.getProgramAPI().getUndoRedoManager().recordChanges(new UndoableChanges() {
- @Override
- public void executeChanges() {
- setModel(TemplateType.PLACE.getName());
- createSubtree(TemplateType.PLACE);
- view.update(PickOrPlaceProgramNodeContribution.this);
- }
- });
- }
- public TemplateType getTemplateType() {
- String templateTypeName = model.get(TEMPLATE_KEY, TemplateType.EMPTY.getName());
- return TemplateType.valueOfByName(templateTypeName);
- }
- private void clearSubtree() {
- ProgramAPI programAPI = apiProvider.getProgramAPI();
- ProgramModel programModel = programAPI.getProgramModel();
- TreeNode tree = programModel.getRootTreeNode(this);
- int size = childrenCount();
- try {
- for (int i = 0; i < size; i++) {
- tree.removeChild(tree.getChildren().get(0));
- }
- } catch (TreeStructureException e) {
- e.printStackTrace();
- // See e.getMessage() for explanation
- }
- }
- private int childrenCount() {
- ProgramAPI programAPI = apiProvider.getProgramAPI();
- ProgramModel programModel = programAPI.getProgramModel();
- return programModel.getRootTreeNode(this).getChildren().size();
- }
- private void createSubtree(TemplateType template) {
- ProgramAPI programAPI = apiProvider.getProgramAPI();
- ProgramModel programModel = programAPI.getProgramModel();
- ProgramNodeFactory nf = programModel.getProgramNodeFactory();
- TreeNode root = programModel.getRootTreeNode(this);
- try {
- root.addChild(nf.createMoveNode());
- addGripper(template, root, nf);
- TreeNode folderRetract = root.addChild(nf.createFolderNode());
- folderRetract.addChild(nf.createCommentNode().setComment("Please customize your functionality here"));
- } catch (TreeStructureException e) {
- e.printStackTrace();
- // See e.getMessage() for explanation
- }
- }
- private void addGripper(TemplateType template, TreeNode root, ProgramNodeFactory nf) throws TreeStructureException {
- switch (template) {
- case PICK:
- root.addChild(nf.createURCapProgramNode(GripperCloseProgramNodeService.class));
- break;
- case PLACE:
- root.addChild(nf.createURCapProgramNode(GripperOpenProgramNodeService.class));
- break;
- default:
- break;
- }
- }
- private void lockChildSequence(ProgramAPIProvider apiProvider) {
- ProgramAPI programAPI = apiProvider.getProgramAPI();
- ProgramModel programModel = programAPI.getProgramModel();
- TreeNode root = programModel.getRootTreeNode(this);
- root.setChildSequenceLocked(true);
- }
- }
|