r1474 - in trunk/src: main/java/cc/kune/common/client/actions/ui main/java/cc/kune/common/client/actions/ui/descrip main/java/cc/kune/core/client/dnd main/java/cc/kune/core/server/content main/java/cc/kune/domain main/java/cc/kune/gspace/client/tool/selector main/java/cc/kune/gspace/client/viewers test/java/cc/kune/core/server/manager test/java/cc/kune/core/server/mapper test/java/cc/kune/gspace/client/viewers
Author: vjrj_ Date: 2011-07-29 20:12:12 +0200 (Fri, 29 Jul 2011) New Revision: 1474 Added: trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java trunk/src/main/java/cc/kune/domain/Container.java trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java Log: CLOSED - # 77: D&D from folder to parent http://kune.ourproject.org/issues/ticket/77 CLOSED - # 71: D-and-D folder into folder fails http://kune.ourproject.org/issues/ticket/71 Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/common/client/actions/ui/AbstractGuiItem.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -28,6 +28,7 @@ import cc.kune.common.client.actions.ui.descrip.GuiActionDescrip; import cc.kune.common.client.errors.NotImplementedException; import cc.kune.common.client.utils.TextUtils; +import cc.kune.core.client.dnd.DropTarget; import cc.kune.core.client.resources.IconConstants; import com.google.gwt.resources.client.ImageResource; @@ -79,6 +80,7 @@ setEnabled((Boolean) descriptor.getValue(AbstractAction.ENABLED)); setVisible((Boolean) descriptor.getValue(GuiActionDescrip.VISIBLE)); setStyles((String) descriptor.getValue(Action.STYLES)); + setDropTarget((DropTarget) descriptor.getValue(GuiActionDescrip.DROP_TARGET)); } @Override @@ -103,6 +105,8 @@ toogleTooltipVisible(); } else if (event.getPropertyName().equals(Action.STYLES)) { setStyles((String) newValue); + } else if (event.getPropertyName().equals(GuiActionDescrip.DROP_TARGET)) { + setDropTarget((DropTarget) newValue); } } }; @@ -114,6 +118,12 @@ // the action, if not we only pass the menuitem return descriptor.hasTarget() ? descriptor.getTarget() : descriptor.isChild() ? descriptor.getParent().getTarget() : ActionEvent.NO_TARGET; + }; + + private void setDropTarget(final DropTarget dropTarget) { + if (dropTarget != null) { + dropTarget.init(this); + } } protected abstract void setEnabled(boolean enabled); @@ -162,11 +172,6 @@ protected abstract void setText(String text); - protected void toogleTooltipVisible() { - // do nothing by default - return; - } - protected abstract void setToolTipText(String text); private void setVisible(final Boolean visible) { @@ -179,4 +184,9 @@ public boolean shouldBeAdded() { // NOPMD by vjrj on 18/01/11 0:48 return true; } + + protected void toogleTooltipVisible() { + // do nothing by default + return; + } } Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/AbstractGuiActionDescrip.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -27,6 +27,7 @@ import cc.kune.common.client.actions.ActionEvent; import cc.kune.common.client.actions.ChangeableObject; import cc.kune.common.client.actions.KeyStroke; +import cc.kune.core.client.dnd.DropTarget; /** * The Class AbstractUIActionDescriptor. @@ -164,6 +165,11 @@ } @Override + public void setDropTarget(final DropTarget dropTarget) { + putValue(DROP_TARGET, dropTarget); + } + + @Override public void setEnabled(final boolean enabled) { putValue(Action.ENABLED, enabled); } Modified: trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java =================================================================== --- trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/common/client/actions/ui/descrip/GuiActionDescrip.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -23,9 +23,12 @@ import cc.kune.common.client.actions.ActionEvent; import cc.kune.common.client.actions.KeyStroke; import cc.kune.common.client.actions.PropertyChangeListener; +import cc.kune.core.client.dnd.DropTarget; public interface GuiActionDescrip { + public static final String DROP_TARGET = "dropTarget"; + public static final AbstractGuiActionDescrip NO_PARENT = new NoParentGuiActionDescriptor(); public static final int NO_POSITION = -1; @@ -38,7 +41,6 @@ public static final String TARGET = "target"; public static final String TOOGLE_TOOLTIP_VISIBLE = "toogle-tooltip-visible"; - public static final String VISIBLE = "visibleprop"; void add(final GuiAddCondition addCondition); @@ -81,6 +83,8 @@ void removePropertyChangeListener(final PropertyChangeListener listener); + void setDropTarget(DropTarget dropTarget); + void setEnabled(final boolean enabled); void setId(final String id); Added: trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java (rev 0) +++ trunk/src/main/java/cc/kune/core/client/dnd/DropTarget.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -0,0 +1,9 @@ +package cc.kune.core.client.dnd; + +import com.google.gwt.user.client.ui.Widget; + +public interface DropTarget { + + void init(Widget dropTarget); + +} Modified: trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java =================================================================== --- trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/core/client/dnd/FolderViewerDropController.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -6,6 +6,7 @@ import cc.kune.core.client.rpcservices.ContentServiceAsync; import cc.kune.core.client.state.Session; import cc.kune.core.client.state.StateManager; +import cc.kune.core.shared.domain.utils.StateToken; import cc.kune.core.shared.dto.StateContainerDTO; import cc.kune.gspace.client.viewers.FolderItemWidget; @@ -18,16 +19,23 @@ import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; -public class FolderViewerDropController { +/** + * @author vjrj + * + */ +/** + * @author vjrj + * + */ +public class FolderViewerDropController implements DropTarget { private final ContentServiceAsync contentService; private final KuneDragController dragController; - private SimpleDropController dropController; - private final ErrorHandler erroHandler; private final Session session; private final StateManager stateManager; + private Object target; @Inject public FolderViewerDropController(final KuneDragController dragController, @@ -38,9 +46,9 @@ this.session = session; this.stateManager = stateManager; this.erroHandler = erroHandler; - } + @Override public void init(final Widget dropTarget) { dropController = new SimpleDropController(dropTarget) { @@ -50,13 +58,10 @@ for (final Widget widget : context.selectedWidgets) { if (widget instanceof FolderItemWidget) { getDropTarget().removeStyleName("k-drop-allowed-hover"); - if (getDropTarget() instanceof FolderItemWidget) { - // NotifyUser.info("" + ((FolderItemWidget) - // getDropTarget()).getToken().toString() + " receive: " - // + ((FolderItemWidget) widget).getToken().toString()); + if (target != null) { + final StateToken destToken = (StateToken) target; contentService.moveContent(session.getUserHash(), ((FolderItemWidget) widget).getToken(), - ((FolderItemWidget) getDropTarget()).getToken(), - new AsyncCallback<StateContainerDTO>() { + destToken, new AsyncCallback<StateContainerDTO>() { @Override public void onFailure(final Throwable caught) { erroHandler.process(caught); @@ -121,4 +126,8 @@ }); } + public void setTarget(final Object target) { + this.target = target; + } + } Modified: trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java =================================================================== --- trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/core/server/content/ContainerManagerDefault.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -19,9 +19,6 @@ */ package cc.kune.core.server.content; -import java.util.ArrayList; -import java.util.List; - import javax.persistence.EntityManager; import org.apache.lucene.analysis.standard.StandardAnalyzer; @@ -68,7 +65,6 @@ FilenameUtils.checkBasicFilename(name); final String newtitle = findInexistentName(parent, name); final Container child = new Container(newtitle, group, parent.getToolName()); - child.setAbsolutePath(setAbsolutePath(child, parent)); child.setLanguage(language); child.setTypeId(typeId); parent.addChild(child); @@ -81,9 +77,6 @@ final String type) { final Container container = new Container(name, group, toolName); container.setTypeId(type); - final List<Container> absolutePath = new ArrayList<Container>(); - absolutePath.add(container); - container.setAbsolutePath(absolutePath); return persist(container); } @@ -106,6 +99,10 @@ @Override public void moveContainer(final Container container, final Container newContainer) { final String title = container.getName(); + if (newContainer.equals(container.getParent())) { + // Do nothing (trying to move to the same location) + return; + } if (findIfExistsTitle(newContainer, title)) { throw new NameInUseException(); } @@ -116,8 +113,6 @@ final Container oldContainer = container.getParent(); oldContainer.removeChild(container); newContainer.addChild(container); - // AbsolutePath - container.setAbsolutePath(setAbsolutePath(container, newContainer)); persist(container); } @@ -156,18 +151,6 @@ return super.search(query, firstResult, maxResults); } - private List<Container> setAbsolutePath(final Container child, final Container parent) { - final List<Container> parentAbsolutePath = parent.getAbsolutePath(); - final List<Container> childAbsolutePath = new ArrayList<Container>(); - for (final Container parentRef : parentAbsolutePath) { - childAbsolutePath.add(parentRef); - } - // FIXME: use (tested but change this in other time, not in a pre-release) - // childAbsolutePath.addAll(parentAbsolutePath); - childAbsolutePath.add(child); - return childAbsolutePath; - } - @Override public void setAccessList(final Container container, final AccessLists accessList) { container.setAccessLists(accessList); Modified: trunk/src/main/java/cc/kune/domain/Container.java =================================================================== --- trunk/src/main/java/cc/kune/domain/Container.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/domain/Container.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -33,7 +33,6 @@ import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; -import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OneToOne; @@ -62,10 +61,6 @@ @Table(name = "containers") public class Container implements HasId, HasStateToken { - @LazyCollection(LazyCollectionOption.FALSE) - @ManyToMany(cascade = CascadeType.ALL) - private List<Container> absolutePath; - @OneToOne(cascade = CascadeType.ALL) private AccessLists accessLists; @@ -129,7 +124,6 @@ this.toolName = toolName; this.contents = new HashSet<Content>(); this.childs = new HashSet<Container>(); - this.absolutePath = new ArrayList<Container>(); this.createdOn = System.currentTimeMillis(); } @@ -145,8 +139,16 @@ contents.add(descriptor); } + @Transient public List<Container> getAbsolutePath() { - return absolutePath; + ArrayList<Container> path; + if (isRoot()) { + path = new ArrayList<Container>(); + } else { + path = new ArrayList<Container>((getParent().getAbsolutePath())); + } + path.add(this); + return path; } @Transient @@ -248,10 +250,6 @@ contents.remove(content); } - public void setAbsolutePath(final List<Container> absolutePath) { - this.absolutePath = absolutePath; - } - public void setAccessLists(final AccessLists accessLists) { this.accessLists = accessLists; } Modified: trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/gspace/client/tool/selector/ToolSelectorPanel.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -57,7 +57,7 @@ public void addItem(final ToolSelectorItemView item) { final Widget widget = item.asWidget(); flow.add(widget); - dropControllerProv.get().init(((ToolSelectorItemPanel) widget).getFlow()); + dropControllerProv.get().init(((ToolSelectorItemPanel) widget).getParent()); } @Override Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/ContentViewerPanel.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -162,7 +162,7 @@ channel = webClient.getChannel(); profiles = webClient.getProfiles(); idGenerator = ClientIdGenerator.create(); - loading.addClassName("kune-Margin-40-tb"); + // loading.addClassName("kune-Margin-40-tb"); } } Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerAsTablePanel.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -146,7 +146,9 @@ dragController.makeDraggable(itemWidget, itemWidget.getTitleWidget()); } if (item.isDroppable()) { - dropControllerProv.get().init(itemWidget); + final FolderViewerDropController dropController = dropControllerProv.get(); + dropController.init(itemWidget); + dropController.setTarget(item.getStateToken()); } } Modified: trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java =================================================================== --- trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/main/java/cc/kune/gspace/client/viewers/FolderViewerPresenter.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -27,6 +27,7 @@ import cc.kune.common.client.ui.EditEvent.EditHandler; import cc.kune.common.client.ui.HasEditHandler; import cc.kune.core.client.actions.ActionRegistryByType; +import cc.kune.core.client.dnd.FolderViewerDropController; import cc.kune.core.client.registry.ContentCapabilitiesRegistry; import cc.kune.core.client.registry.IconsRegistry; import cc.kune.core.client.services.FileDownloadUtils; @@ -110,6 +111,7 @@ private final ContentCapabilitiesRegistry capabilitiesRegistry; private final Provider<FileDownloadUtils> downloadUtilsProvider; + private final Provider<FolderViewerDropController> dropController; private HandlerRegistration editHandler; private final I18nTranslationService i18n; private final IconsRegistry iconsRegistry; @@ -123,7 +125,8 @@ final FolderViewerProxy proxy, final Session session, final StateManager stateManager, final I18nTranslationService i18n, final ActionRegistryByType actionsRegistry, final Provider<FileDownloadUtils> downloadUtilsProvider, - final Provider<RenameAction> renameAction, final ContentCapabilitiesRegistry capabilitiesRegistry) { + final Provider<RenameAction> renameAction, final ContentCapabilitiesRegistry capabilitiesRegistry, + final Provider<FolderViewerDropController> dropController) { super(eventBus, view, proxy); this.session = session; this.stateManager = stateManager; @@ -131,6 +134,7 @@ this.actionsRegistry = actionsRegistry; this.downloadUtilsProvider = downloadUtilsProvider; this.capabilitiesRegistry = capabilitiesRegistry; + this.dropController = dropController; iconsRegistry = capabilitiesRegistry.getIconsRegistry(); useGenericImageIcon = false; this.renameAction = renameAction; @@ -247,6 +251,9 @@ final ButtonDescriptor btn = new ButtonDescriptor(new GotoTokenAction( iconsRegistry.getContentTypeIcon(container.getTypeId()), container.getName(), container.getStateToken(), style, stateManager, getEventBus())); + final FolderViewerDropController dropTarget = dropController.get(); + dropTarget.setTarget(container.getStateToken()); + btn.setDropTarget(dropTarget); return btn; } Modified: trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java =================================================================== --- trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/test/java/cc/kune/core/server/manager/ContainerManagerDefaultTest.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -24,9 +24,13 @@ } private Container createContainer(final Container parent) { - return containerManager.createFolder(user.getUserGroup(), parent, "Some title", english, TYPE_FOLDER); + return createContainer(parent, "Some title"); } + private Container createContainer(final Container parent, final String title) { + return containerManager.createFolder(user.getUserGroup(), parent, title, english, TYPE_FOLDER); + } + @Test public void testCreateFolder() { final Container newFolder = createContainer(rootFolder); @@ -61,6 +65,56 @@ containerManager.moveContainer(folderToMove, newParentFolder); } + @Test + public void testMoveFolderToSame() { + final Container folderToMove = createContainer(rootFolder); + containerManager.moveContainer(folderToMove, rootFolder); + // Do nothing (in silence) + } + + @Test + public void testMoveFolderUp() { + final Container parentFolder = createContainer(rootFolder); + final Container folderToMove = createContainer(parentFolder, "Other title"); + assertEquals(0, folderToMove.getChilds().size()); + assertEquals(1, parentFolder.getChilds().size()); + containerManager.moveContainer(folderToMove, rootFolder); + assertEquals(rootFolder, folderToMove.getParent()); + assertEquals(0, parentFolder.getChilds().size()); + assertEquals(2, rootFolder.getChilds().size()); + assertEquals(2, folderToMove.getAbsolutePath().size()); + assertEquals(rootFolder, folderToMove.getAbsolutePath().get(0)); + assertEquals(folderToMove, folderToMove.getAbsolutePath().get(1)); + } + + @Test + public void testMoveMiddleFolder() { + final Container parentFolder = createContainer(rootFolder); + final Container middleFolder = createContainer(parentFolder, "Middle"); + final Container childFolder = createContainer(middleFolder, "Child"); + assertEquals(0, childFolder.getChilds().size()); + assertEquals(1, parentFolder.getChilds().size()); + assertEquals(1, middleFolder.getChilds().size()); + assertEquals(4, childFolder.getAbsolutePath().size()); + assertEquals(rootFolder, childFolder.getAbsolutePath().get(0)); + assertEquals(parentFolder, childFolder.getAbsolutePath().get(1)); + assertEquals(middleFolder, childFolder.getAbsolutePath().get(2)); + assertEquals(childFolder, childFolder.getAbsolutePath().get(3)); + containerManager.moveContainer(middleFolder, rootFolder); + assertEquals(rootFolder, middleFolder.getParent()); + assertEquals(0, parentFolder.getChilds().size()); + assertEquals(2, rootFolder.getChilds().size()); + assertEquals(3, childFolder.getAbsolutePath().size()); + assertEquals(rootFolder, childFolder.getAbsolutePath().get(0)); + assertEquals(middleFolder, childFolder.getAbsolutePath().get(1)); + assertEquals(childFolder, childFolder.getAbsolutePath().get(2)); + assertEquals(1, rootFolder.getAbsolutePath().size()); + assertEquals(rootFolder, rootFolder.getAbsolutePath().get(0)); + assertEquals(2, parentFolder.getAbsolutePath().size()); + assertEquals(rootFolder, parentFolder.getAbsolutePath().get(0)); + assertEquals(parentFolder, parentFolder.getAbsolutePath().get(1)); + } + @Test(expected = AccessViolationException.class) public void testMoveRootFolderFails() { containerManager.moveContainer(rootFolder, rootFolder); Modified: trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java =================================================================== --- trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/test/java/cc/kune/core/server/mapper/MapperTest.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -233,7 +233,6 @@ container.addChild(containerChild); final List<Container> absolutePathChild = new ArrayList<Container>(); absolutePathChild.add(container); - containerChild.setAbsolutePath(absolutePathChild); final ContainerDTO dto = mapper.map(container, ContainerDTO.class); assertEquals(3, dto.getChilds().size()); Modified: trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java =================================================================== --- trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java 2011-07-29 12:48:57 UTC (rev 1473) +++ trunk/src/test/java/cc/kune/gspace/client/viewers/FolderViewerPresenterTest.java 2011-07-29 18:12:12 UTC (rev 1474) @@ -38,7 +38,7 @@ @Before public void before() { presenter = new FolderViewerPresenter(null, null, null, null, null, null, null, null, null, - Mockito.mock(ContentCapabilitiesRegistry.class)); + Mockito.mock(ContentCapabilitiesRegistry.class), null); } @Test
participants (1)
-
Vicente J. Ruiz Jurado