r884 - in trunk: . src/main/java/org/ourproject/kune/docs/client/ctx src/main/java/org/ourproject/kune/platf/client/dto src/main/java/org/ourproject/kune/platf/client/services src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload src/main/java/org/ourproject/kune/platf/server/domain src/main/java/org/ourproject/kune/platf/server/manager src/main/java/org/ourproject/kune/platf/server/manager/impl src/main/java/org/ourproject/kune/workspace/client/ctxnav src/test/java/org/ourproject/
Author: vjrj Date: 2008-09-25 00:54:07 +0200 (Thu, 25 Sep 2008) New Revision: 884 Modified: trunk/pom.xml trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java Log: Complete - task 68: File upload content persist Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/pom.xml 2008-09-24 22:54:07 UTC (rev 884) @@ -247,6 +247,11 @@ <version>2.4</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>jmimemagic</groupId> + <artifactId>jmimemagic</artifactId> + <version>0.1.2</version> + </dependency> <!-- testing dependencies --> <dependency> @@ -283,7 +288,6 @@ </dependency> </dependencies> - <!-- http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/inde... --> <repositories> <repository> Modified: trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-09-24 22:54:07 UTC (rev 884) @@ -61,7 +61,7 @@ } private void setState(final StateDTO state) { - contextNavigatorProvider.get().setState(state); + contextNavigatorProvider.get().setState(state, true); adminContextProvider.get().setState(state); showFolders(); } Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java 2008-09-24 22:54:07 UTC (rev 884) @@ -30,11 +30,16 @@ private StateToken stateToken; private ContentStatusDTO status; private AccessRightsDTO rights; + private String mimeType; public Long getId() { return id; } + public String getMimeType() { + return mimeType; + } + public AccessRightsDTO getRights() { return rights; } @@ -59,6 +64,10 @@ this.id = id; } + public void setMimeType(final String mimeType) { + this.mimeType = mimeType; + } + public void setRights(final AccessRightsDTO rights) { this.rights = rights; } Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 22:54:07 UTC (rev 884) @@ -349,7 +349,8 @@ register(Singleton.class, new Factory<FileUploader>(FileUploader.class) { public FileUploader create() { - final FileUploaderPresenter presenter = new FileUploaderPresenter($(Session.class)); + final FileUploaderPresenter presenter = new FileUploaderPresenter($(Session.class), + $$(ContextNavigator.class)); final FileUploaderDialog panel = new FileUploaderDialog(presenter, i18n, $(WorkspaceSkeleton.class)); presenter.init(panel); return presenter; Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-24 22:54:07 UTC (rev 884) @@ -13,6 +13,7 @@ import com.gwtext.client.core.UrlParam; import com.gwtext.client.widgets.Button; import com.gwtext.client.widgets.ToolbarButton; +import com.gwtext.client.widgets.Window; import com.gwtext.client.widgets.event.ButtonListenerAdapter; import com.gwtextux.client.widgets.upload.UploadDialog; import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter; @@ -111,6 +112,9 @@ dialog.setId(SITE_FILE_UPLOADER); // dialog.setUploadAutostart(true); dialog.setResetOnHide(false); + dialog.setAllowCloseOnUpload(true); + dialog.setCloseAction(Window.HIDE); + dialog.addListener(new UploadDialogListenerAdapter() { @Override public boolean onBeforeAdd(final UploadDialog source, final String filename) { @@ -128,6 +132,7 @@ traybarButton.destroy(); traybarButton = null; } + presenter.onUploadComplete(); } @Override Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-24 22:54:07 UTC (rev 884) @@ -2,7 +2,9 @@ import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.state.Session; +import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator; +import com.calclab.suco.client.ioc.Provider; import com.calclab.suco.client.listener.Listener0; public class FileUploaderPresenter implements FileUploader { @@ -10,9 +12,11 @@ private FileUploaderView view; private final Session session; private StateToken currentUploadStateToken; + private final Provider<ContextNavigator> navProvider; - public FileUploaderPresenter(final Session session) { + public FileUploaderPresenter(final Session session, final Provider<ContextNavigator> navProvider) { this.session = session; + this.navProvider = navProvider; } public boolean checkFolderChange() { @@ -47,6 +51,10 @@ }); } + public void onUploadComplete() { + navProvider.get().refresh(currentUploadStateToken); + } + public void resetPermittedExtensions() { view.resetPermittedExtensions(); } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-24 22:54:07 UTC (rev 884) @@ -118,6 +118,8 @@ @Column(nullable = false) private ContentStatus status; + private String mimeType; + public Content() { translations = new ArrayList<ContentTranslation>(); authors = new ArrayList<User>(); @@ -191,6 +193,10 @@ return license; } + public String getMimeType() { + return mimeType; + } + public Group getOwner(final Group group) { return container.getOwner(); } @@ -293,6 +299,10 @@ this.license = license; } + public void setMimeType(final String mimeType) { + this.mimeType = mimeType; + } + public void setPublishedOn(final Date publishedOn) { this.publishedOn = publishedOn; } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-24 22:54:07 UTC (rev 884) @@ -3,6 +3,11 @@ import java.io.File; import java.io.IOException; +import net.sf.jmimemagic.MagicException; +import net.sf.jmimemagic.MagicMatch; +import net.sf.jmimemagic.MagicMatchNotFoundException; +import net.sf.jmimemagic.MagicParseException; + public interface FileManager { /** @@ -18,6 +23,8 @@ */ File createFileWithSequentialName(String dir, String fileName) throws IOException; + MagicMatch getMimeType(File file) throws MagicParseException, MagicMatchNotFoundException, MagicException; + /** * @param dir * the directory (use File.separator for dir delimiters) Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-24 22:54:07 UTC (rev 884) @@ -3,6 +3,12 @@ import java.io.File; import java.io.IOException; +import net.sf.jmimemagic.Magic; +import net.sf.jmimemagic.MagicException; +import net.sf.jmimemagic.MagicMatch; +import net.sf.jmimemagic.MagicMatchNotFoundException; +import net.sf.jmimemagic.MagicParseException; + import org.ourproject.kune.platf.server.manager.FileManager; import com.google.inject.Singleton; @@ -21,6 +27,11 @@ return file; } + public MagicMatch getMimeType(final File file) throws MagicParseException, MagicMatchNotFoundException, + MagicException { + return Magic.getMagicMatch(file, true); + } + public boolean mkdir(final String dir) { return (new File(dir)).mkdirs(); } Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 22:54:07 UTC (rev 884) @@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import net.sf.jmimemagic.MagicMatch; import net.sf.json.JSONObject; import org.apache.commons.fileupload.FileItem; @@ -20,19 +21,27 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.ourproject.kune.docs.server.DocumentServerTool; import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.services.I18nTranslationService; import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader; +import org.ourproject.kune.platf.server.UserSession; import org.ourproject.kune.platf.server.access.AccessRol; +import org.ourproject.kune.platf.server.access.AccessService; import org.ourproject.kune.platf.server.auth.ActionLevel; import org.ourproject.kune.platf.server.auth.Authenticated; import org.ourproject.kune.platf.server.auth.Authorizated; import org.ourproject.kune.platf.server.content.ContentManager; +import org.ourproject.kune.platf.server.domain.Container; +import org.ourproject.kune.platf.server.domain.Content; +import org.ourproject.kune.platf.server.domain.User; import org.ourproject.kune.platf.server.manager.FileManager; import org.ourproject.kune.platf.server.properties.KuneProperties; import com.google.inject.Inject; import com.google.inject.servlet.RequestScoped; +import com.wideplay.warp.persist.TransactionType; +import com.wideplay.warp.persist.Transactional; @RequestScoped public class FileUploadManager extends HttpServlet { @@ -44,8 +53,12 @@ @Inject KuneProperties kuneProperties; @Inject + UserSession userSession; + @Inject ContentManager contentManager; @Inject + AccessService accessService; + @Inject FileManager fileManager; @Inject I18nTranslationService i18n; @@ -114,20 +127,30 @@ @Authenticated @Authorizated(accessRolRequired = AccessRol.Editor, actionLevel = ActionLevel.container) + @Transactional(type = TransactionType.READ_WRITE) JSONObject createFile(final String userHash, final StateToken stateToken, final String fileName, final FileItem fileUploadItem) throws Exception { - final String destDir = calculateUploadDirLocation(stateToken); - fileManager.mkdir(destDir); - final File file = fileManager.createFileWithSequentialName(destDir, fileName); + final String relDir = calculateUploadDirLocation(stateToken); + final String absDir = kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + relDir; + fileManager.mkdir(absDir); + final File file = fileManager.createFileWithSequentialName(absDir, fileName); fileUploadItem.write(file); - fileUploadItem.getContentType(); - // here ContentManager code + final MagicMatch magic = fileManager.getMimeType(file); + + // Persist + final User user = userSession.getUser(); + final Container container = accessService.accessToContainer(new Long(stateToken.getFolder()), user, + AccessRol.Editor); + final Content content = contentManager.createContent(FileUtils.getFileNameWithoutExtension(file.getName(), + magic.getExtension()), relDir + File.separator + file.getName(), user, container); + content.setTypeId(DocumentServerTool.TYPE_UPLOADEDFILE); + content.setMimeType(magic.getMimeType()); return createSuccessResponse(); } private String calculateUploadDirLocation(final StateToken stateToken) { - return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.separator + stateToken.getGroup() - + File.separator + stateToken.getTool() + File.separator + stateToken.getFolder(); + return File.separator + stateToken.getGroup() + File.separator + stateToken.getTool() + File.separator + + stateToken.getFolder(); } private JSONObject createJsonResponse(final boolean success, final String message) { Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-24 22:54:07 UTC (rev 884) @@ -2,6 +2,15 @@ public class FileUtils { + public static String getFileNameWithoutExtension(final String fileName, final String extension) { + final int extlength = extension.length(); + if (extlength > 0) { + return fileName.substring(0, fileName.length() - extlength - 1); + } else { + return fileName; + } + } + public static String getNextSequentialFileName(final String fileName) { final int lastSpace = fileName.lastIndexOf(" "); if (lastSpace != -1) { Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-24 22:54:07 UTC (rev 884) @@ -32,12 +32,14 @@ boolean isSelected(StateToken stateToken); + void refresh(StateToken stateToken); + void selectItem(StateToken stateToken); void setEditOnNextStateChange(boolean edit); void setItemText(StateToken stateToken, String name); - void setState(StateDTO state); + void setState(StateDTO state, boolean selectItem); } Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-24 22:54:07 UTC (rev 884) @@ -37,7 +37,8 @@ import com.gwtext.client.core.EventObject; import com.gwtext.client.core.ExtElement; import com.gwtext.client.data.Node; -import com.gwtext.client.data.Tree; +import com.gwtext.client.dd.DragData; +import com.gwtext.client.dd.DragDrop; import com.gwtext.client.widgets.Editor; import com.gwtext.client.widgets.event.EditorListenerAdapter; import com.gwtext.client.widgets.form.TextField; @@ -45,6 +46,7 @@ import com.gwtext.client.widgets.menu.Item; import com.gwtext.client.widgets.menu.Menu; import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter; +import com.gwtext.client.widgets.tree.DropNodeCallback; import com.gwtext.client.widgets.tree.TreeEditor; import com.gwtext.client.widgets.tree.TreeNode; import com.gwtext.client.widgets.tree.TreePanel; @@ -238,6 +240,13 @@ root.expand(); createItemMenu(rootId, actions, stateToken); treePanel.addListener(new TreePanelListenerAdapter() { + public boolean doBeforeNodeDrop(final TreePanel treePanel, final TreeNode target, final DragData dragData, + final String point, final DragDrop source, final TreeNode dropNode, + final DropNodeCallback dropNodeCallback) { + Site.info("Drag & drop of contents in development"); + return false; + } + public void onContextMenu(final TreeNode node, final EventObject e) { final Menu menu = contextMenus.get(node.getId()); if (menu != null && menu.getItems().length > 0) { @@ -246,14 +255,6 @@ Log.info("Empty item menu"); } } - - @Override - public void onMoveNode(final Tree treePanel, final TreeNode node, final TreeNode oldParent, - final TreeNode newParent, final int index) { - newParent.removeChild(node); - oldParent.appendChild(node); - Site.info("Drag & drop of contents in development"); - } }); treePanel.setLines(false); treePanel.setEnableDD(isEditable); Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-24 22:54:07 UTC (rev 884) @@ -37,6 +37,7 @@ import org.ourproject.kune.platf.client.dto.StateDTO; import org.ourproject.kune.platf.client.dto.StateToken; import org.ourproject.kune.platf.client.dto.UserInfoDTO; +import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple; import org.ourproject.kune.platf.client.rpc.ContentServiceAsync; import org.ourproject.kune.platf.client.state.Session; import org.ourproject.kune.platf.client.state.StateManager; @@ -149,6 +150,14 @@ } } + public void refresh(final StateToken stateToken) { + contentServiceProvider.get().getContent(session.getUserHash(), stateToken, new AsyncCallbackSimple<StateDTO>() { + public void onSuccess(final StateDTO result) { + setState(result, false); + } + }); + } + public void selectItem(final StateToken stateToken) { view.selectItem(genId(stateToken)); toolbar.disableMenusAndClearButtons(); @@ -163,7 +172,7 @@ view.setItemText(genId(stateToken), name); } - public void setState(final StateDTO state) { + public void setState(final StateDTO state, final boolean select) { final ContainerDTO container = state.getContainer(); final StateToken stateToken = state.getStateToken(); final AccessRightsDTO containerRights = state.getContainerRights(); @@ -209,11 +218,14 @@ // Finaly if (mustEditOnNextStateChange()) { + // Code smell selectItem(stateToken); editItem(stateToken); setEditOnNextStateChange(false); } else { - selectItem(stateToken); + if (select) { + selectItem(stateToken); + } } } Modified: trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java =================================================================== --- trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-24 22:54:07 UTC (rev 884) @@ -20,7 +20,7 @@ public void before() { session = Mockito.mock(Session.class); view = Mockito.mock(FileUploaderView.class); - presenter = new FileUploaderPresenter(session); + presenter = new FileUploaderPresenter(session, null); presenter.init(view); Mockito.stub(session.getUserHash()).toReturn(SOMEUSER_HASH); } Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java =================================================================== --- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-24 20:16:24 UTC (rev 883) +++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-24 22:54:07 UTC (rev 884) @@ -20,6 +20,16 @@ } @Test + public void testFileNameWExtensionSimple() { + assertEquals("test", FileUtils.getFileNameWithoutExtension("test.txt", "txt")); + } + + @Test + public void testFileNameWithoutExtension() { + assertEquals("test", FileUtils.getFileNameWithoutExtension("test", "")); + } + + @Test public void testIfSeq101return102() { assertEquals(SIMPLE_FILE_NAME + " 102", FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + " 101")); }
participants (1)
-
vjrj