/* Copyright 2012-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.snaker.designer.commands; import org.eclipse.gef.Request; import org.eclipse.gef.commands.Command; import org.eclipse.gef.requests.CreateRequest; import org.snaker.designer.commands.FieldBackwardCommand; import org.snaker.designer.commands.FieldDeleteCommand; import org.snaker.designer.commands.FieldForwardCommand; import org.snaker.designer.commands.LineBRCancelCommand; import org.snaker.designer.commands.LineBRSetCommand; import org.snaker.designer.commands.PlaceHolderDecreaseCommand; import org.snaker.designer.commands.PlaceHolderIncreaseCommand; import org.snaker.designer.model.BaseElement; import org.snaker.designer.model.Field; /** * 命令帮助类 * @author yuqs * @version 1.0 */ public class CommandHelper { public static final String CREATE_CHILD = "create child"; public static final String REQUEST_TYPE_ADDOPTION = "添加选项"; public static final String REQUEST_TYPE_DELETE = "删除"; public static final String REQUEST_TYPE_FORWARD = "前移"; public static final String REQUEST_TYPE_BACKWARD = "后移"; public static final String REQUEST_TYPE_ADDPLACEHOLDER = "增加占位符"; public static final String REQUEST_TYPE_DELPLACEHOLDER = "减少占位符"; public static final String REQUEST_TYPE_SETLINEBR = "设置换行"; public static final String REQUEST_TYPE_CANCELLINEBR = "取消换行"; public static boolean understandCommand(Request request, Object obj) { if (REQUEST_TYPE_ADDOPTION.equals(request.getType())) { return false; } else { if (REQUEST_TYPE_DELETE.equals(request.getType())) { return true; } if (REQUEST_TYPE_FORWARD.equals(request.getType())) { return true; } if (REQUEST_TYPE_BACKWARD.equals(request.getType())) { return true; } if (REQUEST_TYPE_ADDPLACEHOLDER.equals(request.getType())) { return true; } if (REQUEST_TYPE_DELPLACEHOLDER.equals(request.getType())) { return true; } if (REQUEST_TYPE_SETLINEBR.equals(request.getType())) { return true; } if (REQUEST_TYPE_CANCELLINEBR.equals(request.getType())) { return true; } } return false; } public static Command getCommand(Request request, Object model, Object parent) { if (REQUEST_TYPE_ADDOPTION.equals(request.getType())) { // return createChoiceFieldCommand(request, (Field) model); } if (REQUEST_TYPE_DELETE.equals(request.getType())) { return createDeleteCommand(request, model, parent); } if (REQUEST_TYPE_FORWARD.equals(request.getType())) { return createForwardCommand(request, model, parent); } if (REQUEST_TYPE_BACKWARD.equals(request.getType())) { return createBackwardCommand(request, model, parent); } if (REQUEST_TYPE_ADDPLACEHOLDER.equals(request.getType())) { return createPlaceholderIncreaseCommand(request, model, parent); } if (REQUEST_TYPE_DELPLACEHOLDER.equals(request.getType())) { return createPlaceholderDecreaseCommand(request, model, parent); } if (REQUEST_TYPE_SETLINEBR.equals(request.getType())) { return createLineBRSetCommand(request, model, parent); } if (REQUEST_TYPE_CANCELLINEBR.equals(request.getType())) { return createLineBRCancelCommand(request, model, parent); } return null; } private static Command createBackwardCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { FieldBackwardCommand cmd = new FieldBackwardCommand(); cmd.setModel((Field) model); cmd.setParent((BaseElement) parent); return cmd; } return null; } private static Command createForwardCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { FieldForwardCommand cmd = new FieldForwardCommand(); cmd.setModel((Field) model); cmd.setParent((BaseElement) parent); return cmd; } return null; } private static Command createDeleteCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { FieldDeleteCommand cmd = new FieldDeleteCommand(); cmd.setModel((Field) model); cmd.setParent((BaseElement) parent); return cmd; } return null; } private static Command createLineBRSetCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { LineBRSetCommand cmd = new LineBRSetCommand(); cmd.setModel((Field) model); return cmd; } return null; } private static Command createLineBRCancelCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { LineBRCancelCommand cmd = new LineBRCancelCommand(); cmd.setModel((Field) model); return cmd; } return null; } private static Command createPlaceholderIncreaseCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { PlaceHolderIncreaseCommand cmd = new PlaceHolderIncreaseCommand(); cmd.setModel((Field) model); cmd.setParent((BaseElement) parent); return cmd; } return null; } private static Command createPlaceholderDecreaseCommand(Request request, Object model, Object parent) { if ((model instanceof Field)) { PlaceHolderDecreaseCommand cmd = new PlaceHolderDecreaseCommand(); cmd.setModel((Field) model); return cmd; } return null; } private static Command getCreateFieldCommand(CreateRequest request, BaseElement parent) { String newObjectType = (String) request.getNewObjectType(); FieldCreateCommand create = new FieldCreateCommand(); create.setField((Field) request.getNewObject()); create.setParent(parent); create.setLabel(newObjectType); return create; } public static Command getCreateCommand(Request request, Object model) { if (CREATE_CHILD.equals(request.getType())) { try { CreateRequest req = (CreateRequest) request; if ((req.getNewObject() instanceof Field)) { return getCreateFieldCommand(req, (BaseElement) model); } } catch (Exception e) { e.printStackTrace(); return null; } } return null; } }