001 package org.apache.myfaces.tobago.event;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements. See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 /*
021 * Created 14.02.2003 13:40:19.
022 * $Id: DefaultTreeActionListener.java 578592 2007-09-23 18:51:32Z bommel $
023 */
024
025 import org.apache.commons.logging.Log;
026 import org.apache.commons.logging.LogFactory;
027 import org.apache.myfaces.tobago.component.UITreeOld;
028 import org.apache.myfaces.tobago.context.ResourceManagerUtil;
029 import org.apache.myfaces.tobago.model.TreeState;
030
031 import javax.faces.component.UIComponent;
032 import javax.faces.component.UIPanel;
033 import javax.faces.context.FacesContext;
034 import javax.faces.event.AbortProcessingException;
035 import javax.faces.event.ActionEvent;
036 import javax.faces.event.ActionListener;
037 import javax.swing.tree.DefaultMutableTreeNode;
038 import javax.swing.tree.MutableTreeNode;
039
040 public class DefaultTreeActionListener implements ActionListener {
041
042 private static final Log LOG = LogFactory.getLog(DefaultTreeActionListener.class);
043
044 protected DefaultMutableTreeNode create(FacesContext facesContext) {
045 String label = ResourceManagerUtil.getPropertyNotNull(facesContext, "tobago", "treeNodeNew");
046 return new DefaultMutableTreeNode(label);
047 }
048
049 protected DefaultMutableTreeNode copy(DefaultMutableTreeNode node) {
050 return new DefaultMutableTreeNode(node.getUserObject());
051 }
052
053 public void processAction(ActionEvent actionEvent) throws AbortProcessingException {
054
055 FacesContext facesContext = FacesContext.getCurrentInstance();
056 UIComponent component = actionEvent.getComponent().getParent();
057 if (component instanceof UIPanel) {
058 // component is toolbar
059 component = component.getParent();
060 }
061 if (!(component instanceof UITreeOld)) {
062 LOG.error("No tree found!");
063 return;
064 }
065
066 UITreeOld tree = (UITreeOld) component;
067 TreeState treeState = tree.getState();
068 DefaultMutableTreeNode marker = treeState.getMarker();
069 String command = actionEvent.getComponent().getId();
070
071 if (LOG.isDebugEnabled()) {
072 LOG.debug("marker " + marker);
073 LOG.debug("lastMarker " + treeState.getLastMarker());
074 LOG.debug("root " + tree.getValue());
075 LOG.debug("command " + command);
076 LOG.debug("lastCommand " + treeState.getLastCommand());
077 }
078 if (marker != null) {
079 boolean isRoot = tree.getValue().equals(marker);
080 if (UITreeOld.COMMAND_NEW.equals(command)) {
081 treeState.commandNew(create(facesContext));
082 } else if (UITreeOld.COMMAND_DELETE.equals(command)) {
083 if (!isRoot) {
084 marker.removeFromParent();
085 }
086 treeState.setLastMarker(null);
087 treeState.setLastCommand(null);
088 } else if (UITreeOld.COMMAND_CUT.equals(command)) {
089 if (!isRoot) {
090 treeState.setLastMarker(marker);
091 treeState.setLastCommand(command);
092 }
093 } else if (UITreeOld.COMMAND_COPY.equals(command)) {
094 treeState.setLastMarker(marker);
095 treeState.setLastCommand(command);
096 } else if (UITreeOld.COMMAND_PASTE.equals(command)) {
097 if (treeState.getLastMarker() != null) {
098 if (UITreeOld.COMMAND_CUT.equals(treeState.getLastCommand())) {
099 marker.insert(treeState.getLastMarker(), 0);
100 } else if (UITreeOld.COMMAND_COPY.equals(treeState.getLastCommand())) {
101 marker.insert(copy(treeState.getLastMarker()), 0);
102 }
103 treeState.setLastMarker(null);
104 treeState.setLastCommand(null);
105 }
106 } else if (UITreeOld.COMMAND_MOVE_UP.equals(command)) {
107 if (!isRoot) {
108 MutableTreeNode node = marker;
109 MutableTreeNode parent = (MutableTreeNode) node.getParent();
110 int index = parent.getIndex(node);
111 index = Math.max(index - 1, 0);
112 parent.insert(node, index);
113 }
114 treeState.setLastMarker(null);
115 treeState.setLastCommand(null);
116 } else if (UITreeOld.COMMAND_MOVE_DOWN.equals(command)) {
117 if (!isRoot) {
118 MutableTreeNode node = marker;
119 MutableTreeNode parent = (MutableTreeNode) node.getParent();
120 int index = parent.getIndex(node);
121 index = Math.min(index + 1, parent.getChildCount() - 1);
122 parent.insert(node, index);
123 }
124 treeState.setLastMarker(null);
125 treeState.setLastCommand(null);
126 }
127 }
128 }
129 }