/*
* (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.ie.view.controller.dnd;
import org.openflexo.components.browser.BrowserElement;
import org.openflexo.components.browser.ProjectBrowser;
import org.openflexo.components.browser.dnd.TreeDropTarget;
import org.openflexo.components.browser.ie.ComponentElement;
import org.openflexo.components.browser.ie.ComponentFolderElement;
import org.openflexo.components.browser.ie.MonitoringScreenDefinitionElement;
import org.openflexo.components.browser.ie.ReusableComponentDefinitionElement;
import org.openflexo.components.browser.view.BrowserView.FlexoJTree;
import org.openflexo.foundation.ie.cl.ComponentDefinition;
import org.openflexo.foundation.ie.cl.FlexoComponentFolder;
import org.openflexo.view.controller.FlexoController;
/**
*
* @author gpolet
*
*/
public class IECLTreeDropTarget extends TreeDropTarget {
public IECLTreeDropTarget(FlexoJTree tree, ProjectBrowser browser) {
super(tree, browser);
}
@Override
public boolean targetAcceptsSource(BrowserElement target, BrowserElement source) {
if (!(target instanceof ComponentFolderElement) && target.getParent() instanceof ComponentFolderElement) {
target = (ComponentFolderElement) target.getParent();
}
if (target instanceof ComponentFolderElement) {
FlexoComponentFolder targetFolder = (FlexoComponentFolder) ((ComponentFolderElement) target).getObject();
if (source instanceof ComponentFolderElement) {
FlexoComponentFolder sourceFolder = (FlexoComponentFolder) ((ComponentFolderElement) source).getObject();
if (sourceFolder.isRootFolder()) {
return false;
}
FlexoComponentFolder srcFolder = (FlexoComponentFolder) ((ComponentFolderElement) ((ComponentFolderElement) source)
.getParent()).getObject();
if (targetFolder == sourceFolder) {
return false;
}
if (targetFolder.getFolderNamed(sourceFolder.getName()) != null) {
return false;
}
if (targetFolder != srcFolder && !sourceFolder.isFatherOf(targetFolder)) {
return true;
} else {
return false;
}
} else if (source instanceof ReusableComponentDefinitionElement || source instanceof ComponentElement
|| source instanceof MonitoringScreenDefinitionElement) {
ComponentDefinition sourceComp = null;
FlexoComponentFolder srcFolder = null;
if (source instanceof ReusableComponentDefinitionElement) {
sourceComp = ((ReusableComponentDefinitionElement) source).getComponentDefinition();
srcFolder = (FlexoComponentFolder) ((ComponentFolderElement) ((ReusableComponentDefinitionElement) source).getParent())
.getObject();
} else if (source instanceof ComponentElement) {
sourceComp = ((ComponentElement) source).getComponentDefinition();
srcFolder = sourceComp.getFolder();
} else if (source instanceof MonitoringScreenDefinitionElement) {
sourceComp = ((MonitoringScreenDefinitionElement) source).getComponentDefinition();
srcFolder = sourceComp.getFolder();
}
if (targetFolder != srcFolder) {
return true;
} else {
return false;
}
} else {
return false;
}
}
return false;
}
@Override
public boolean handleDrop(BrowserElement moved, BrowserElement destination) {
if (!(destination instanceof ComponentFolderElement) && !(destination.getParent() instanceof ComponentFolderElement)) {
return false;
}
if (!(destination instanceof ComponentFolderElement) && destination.getParent() instanceof ComponentFolderElement) {
destination = (ComponentFolderElement) destination.getParent();
}
FlexoComponentFolder targetFolder = (FlexoComponentFolder) ((ComponentFolderElement) destination).getObject();
if (moved instanceof ComponentFolderElement) {
FlexoComponentFolder movedFolder = (FlexoComponentFolder) ((ComponentFolderElement) moved).getObject();
if (movedFolder.isRootFolder()) {
return false;
}
FlexoComponentFolder srcFolder = (FlexoComponentFolder) ((ComponentFolderElement) ((ComponentFolderElement) moved).getParent())
.getObject();
if (targetFolder == movedFolder) {
return false;
}
if (targetFolder.getFolderNamed(movedFolder.getName()) != null) {
FlexoController.notify("there_is_already_a_folder_with that name");
return false;
}
if (targetFolder != srcFolder && !movedFolder.isFatherOf(targetFolder)) {
srcFolder.removeFromSubFolders(movedFolder);
movedFolder.setFatherFolder(targetFolder);
targetFolder.addToSubFolders(movedFolder);
// srcFolder.getComponentLibrary().notifyTreeStructureChanged();
} else {
return false;
}
} else if (moved instanceof ReusableComponentDefinitionElement || moved instanceof ComponentElement
|| moved instanceof MonitoringScreenDefinitionElement) {
ComponentDefinition movedComp = null;
FlexoComponentFolder srcFolder = null;
if (moved instanceof ReusableComponentDefinitionElement) {
movedComp = ((ReusableComponentDefinitionElement) moved).getComponentDefinition();
srcFolder = (FlexoComponentFolder) ((ComponentFolderElement) ((ReusableComponentDefinitionElement) moved).getParent())
.getObject();
} else if (moved instanceof ComponentElement) {
movedComp = ((ComponentElement) moved).getComponentDefinition();
srcFolder = movedComp.getFolder();
} else if (moved instanceof MonitoringScreenDefinitionElement) {
movedComp = ((MonitoringScreenDefinitionElement) moved).getComponentDefinition();
srcFolder = movedComp.getFolder();
}
if (targetFolder != srcFolder) {
srcFolder.removeFromComponents(movedComp);
targetFolder.addToComponents(movedComp);
// srcFolder.getComponentLibrary().notifyTreeStructureChanged();
} else {
return false;
}
} else {
return false;
}
return true;
}
}