/**
* Copyright (c) 2009 Juwi MacMillan Group GmbH
*
* 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 de.juwimm.cms.gui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import org.apache.log4j.Logger;
import de.juwimm.cms.Main;
import de.juwimm.cms.common.Constants;
import de.juwimm.cms.content.event.TreeSelectionEventData;
import de.juwimm.cms.deploy.panel.PanTaskDetails;
import de.juwimm.cms.gui.controls.LoadableViewComponentPanel;
import de.juwimm.cms.gui.controls.UnloadablePanel;
import de.juwimm.cms.gui.tree.PageNode;
import de.juwimm.cms.gui.tree.PageOtherUnitNode;
import de.juwimm.cms.gui.tree.TreeNode;
import de.juwimm.cms.gui.views.PanContentView;
import de.juwimm.cms.gui.views.PanExternallinkView;
import de.juwimm.cms.gui.views.PanInitView;
import de.juwimm.cms.gui.views.PanInternallinkView;
import de.juwimm.cms.gui.views.PanSeparatorView;
import de.juwimm.cms.gui.views.PanSymlinkView;
import de.juwimm.cms.util.ActionHub;
import de.juwimm.cms.vo.TaskValue;
import de.juwimm.cms.vo.ViewComponentValue;
import de.juwimm.swing.DropDownHolder;
/**
* <p>Title: juwimm cms</p>
* <p>Description: content management system</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: juwi macmillan group gmbh</p>
* @author Dirk Bogun
* @version $Id$
*/
public final class PanTool extends JPanel implements UnloadablePanel, ActionListener {
private static Logger log = Logger.getLogger(PanTool.class);
private static PanTree panTree;
private JSplitPane splitPane = new JSplitPane();
private JPanel rightPan = new JPanel(new BorderLayout());
private PanTaskDetails panTaskDetails;
private PanInitView panInit;
private PanExternallinkView panExternalLink;
private PanSeparatorView panSeparator;
private PanInternallinkView panInternalLink;
private PanSymlinkView panSymlink;
private PanContentView panContent;
private PanTaskTable panTask;
private JPanel pnlLeft = new JPanel();
private static PanTool instance = null;
/**
* This is the method to call if you want to get an PanelCmsTool Instance.
*
* @return
*/
public static PanTool getInstance() {
if (instance == null) {
instance = new PanTool();
}
return instance;
}
private PanTool() {
ActionHub.addActionListener(this);
try {
setDoubleBuffered(true);
if (panTree == null) {
panTree = new PanTree();
ActionHub.addActionListener(panTree);
}
jbInit();
} catch (Exception exe) {
log.error("Initialization Error", exe);
}
}
void jbInit() throws Exception {
this.setLayout(new BorderLayout());
panInit = PanInitView.getInstance();
panExternalLink = new PanExternallinkView();
panInternalLink = new PanInternallinkView();
panSeparator = new PanSeparatorView();
panContent = PanContentView.getInstance();
panSymlink = new PanSymlinkView();
pnlLeft.setLayout(new BorderLayout());
pnlLeft.add(panTree.getParametersPanel(), BorderLayout.NORTH);
pnlLeft.add(panTree, BorderLayout.CENTER);
splitPane.setBorder(null);
splitPane.setDividerSize(3);
splitPane.setDividerLocation(300);
splitPane.setOneTouchExpandable(true);
splitPane.setLeftComponent(pnlLeft);
splitPane.setRightComponent(rightPan);
this.add(splitPane, BorderLayout.CENTER);
}
public void reload(boolean withSelection, Object source) throws Exception {
this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
try {
panContent.reload();
if (!withSelection) {
panTree.reload();
} else {
panTree.reloadWithSelection((TreeSelectionEventData) source);
}
panTree.setCursor(Cursor.getDefaultCursor());
panTree.getParametersPanel().setCursor(Cursor.getDefaultCursor());
panContent.setCursor(Cursor.getDefaultCursor());
} catch (Exception e) {
this.setCursor(Cursor.getDefaultCursor());
panTree.getParametersPanel().setCursor(Cursor.getDefaultCursor());
panContent.setCursor(Cursor.getDefaultCursor());
throw e;
}
}
public void unload() {
//instance = null;
}
public void setTreeToEmpty() {
panTree.setTreeToEmpty();
}
private LoadableViewComponentPanel oldRight = null;
private void updateRightComponent(Component right) {
rightPan.removeAll();
rightPan.add(right, BorderLayout.CENTER);
if (right instanceof LoadableViewComponentPanel) {
if (oldRight != null) {
oldRight.unload();
}
oldRight = (LoadableViewComponentPanel) right;
}
}
public void actionPerformed(ActionEvent e) {
if ((e.getActionCommand().equals(Constants.ACTION_TREE_SELECT)) || (e.getActionCommand().equals(Constants.ACTION_TREE_SELECT_SAVE))) {
setCursor(new Cursor(Cursor.WAIT_CURSOR));
TreeNode treeNode = (TreeNode) e.getSource();
if (treeNode instanceof PageNode) {
ViewComponentValue vc = ((PageNode) e.getSource()).getViewComponent();
if (e.getActionCommand().equals(Constants.ACTION_TREE_SELECT_SAVE)) {
try {
log.debug("actionPerformed::ACTION_TREE_SELECT_SAVE");
Main.getInstance().freezeInput(true);
panContent.save();
} catch (Exception ex) {
log.error(ex.getMessage());
}
}
if (treeNode instanceof PageOtherUnitNode) {
updateRightComponent(panInit);
} else if (vc.getViewType() == Constants.VIEW_TYPE_CONTENT || vc.getViewType() == Constants.VIEW_TYPE_UNIT) {
updateRightComponent(panContent);
panContent.load(vc);
} else if (vc.getViewType() == Constants.VIEW_TYPE_EXTERNAL_LINK) {
updateRightComponent(panExternalLink);
panExternalLink.load(vc);
} else if (vc.getViewType() == Constants.VIEW_TYPE_SEPARATOR) {
updateRightComponent(panSeparator);
panSeparator.load(vc);
} else if (vc.getViewType() == Constants.VIEW_TYPE_INTERNAL_LINK) {
updateRightComponent(panInternalLink);
panInternalLink.load(vc);
} else if (vc.getViewType() == Constants.VIEW_TYPE_SYMLINK) {
updateRightComponent(panSymlink);
panSymlink.load(vc);
}
} else {
updateRightComponent(panInit);
}
setCursor(Cursor.getDefaultCursor());
} else if (e.getActionCommand().equals(Constants.ACTION_TREE_DESELECT)) {
updateRightComponent(panInit);
} else if (e.getActionCommand().equals(Constants.ACTION_TASK_SELECT)) {
updateRightComponent(panInit);
if (panTaskDetails == null) {
panTaskDetails = new PanTaskDetails();
}
TaskValue task = (TaskValue) e.getSource();
if (task.getTaskType() == Constants.TASK_MESSAGE || task.getTaskType() == Constants.TASK_REJECTED) {
panTaskDetails.load(task.getComment());
} else {
panTaskDetails.load(task);
}
updateRightComponent(panTaskDetails);
} else if (e.getActionCommand().equals(Constants.ACTION_TASK_DESELECT)) {
updateRightComponent(panInit);
} else if (e.getActionCommand().equals(Constants.ACTION_TASK_DONE)) {
updateRightComponent(panInit);
} else if (e.getActionCommand().equals(Constants.ACTION_SHOW_TASK)) {
try {
pnlLeft.remove(panTree.getParametersPanel());
pnlLeft.remove(panTree);
} catch (Exception exe) {
}
if (panTask == null) {
panTask = new PanTaskTable();
}
panTask.reload();
pnlLeft.add(panTask, BorderLayout.CENTER);
updateRightComponent(panInit);
} else if (e.getActionCommand().equals(Constants.ACTION_SHOW_CONTENT) || e.getActionCommand().equals(Constants.ACTION_VIEW_EDITOR)) {
try {
pnlLeft.remove(panTask);
} catch (Exception exe) {
}
pnlLeft.add(panTree.getParametersPanel(), BorderLayout.NORTH);
pnlLeft.add(panTree, BorderLayout.CENTER);
}
}
public void selectDefaultViewDocument() {
panTree.selectDefaultViewDocument();
}
public DropDownHolder getSelectedViewDocument() {
return ((DropDownHolder) PanTool.panTree.getSelectedViewDocument());
}
}