Automated merge with https://gss.googlecode.com/hg/
authorChristos V. Stathis <chstath@ebs.gr>
Tue, 14 Dec 2010 12:32:38 +0000 (14:32 +0200)
committerChristos V. Stathis <chstath@ebs.gr>
Tue, 14 Dec 2010 12:32:38 +0000 (14:32 +0200)
24 files changed:
solr/conf/schema.xml
src/gr/ebs/gss/admin/client/AdminService.java
src/gr/ebs/gss/admin/client/AdminServiceAsync.java
src/gr/ebs/gss/admin/client/TwoAdmin.ui.xml
src/gr/ebs/gss/admin/client/ui/OperationsPanel.java [new file with mode: 0644]
src/gr/ebs/gss/admin/client/ui/OperationsPanel.ui.xml [new file with mode: 0644]
src/gr/ebs/gss/client/FileList.java
src/gr/ebs/gss/client/rest/resource/FileResource.java
src/gr/ebs/gss/client/rest/resource/FolderResource.java
src/gr/ebs/gss/client/rest/resource/OtherUserResource.java
src/gr/ebs/gss/client/rest/resource/SharedResource.java
src/gr/ebs/gss/server/admin/AdminServiceImpl.java
src/gr/ebs/gss/server/domain/FileHeader.java
src/gr/ebs/gss/server/domain/Folder.java
src/gr/ebs/gss/server/domain/dto/FileHeaderDTO.java
src/gr/ebs/gss/server/domain/dto/FolderDTO.java
src/gr/ebs/gss/server/ejb/AdminAPI.java
src/gr/ebs/gss/server/ejb/AdminAPIBean.java
src/gr/ebs/gss/server/ejb/ExternalAPIBean.java
src/gr/ebs/gss/server/ejb/GSSDAO.java
src/gr/ebs/gss/server/ejb/GSSDAOBean.java
src/gr/ebs/gss/server/rest/FilesHandler.java
src/gr/ebs/gss/server/rest/OthersHandler.java
src/gr/ebs/gss/server/rest/SharedHandler.java

index 3729470..1ad5939 100644 (file)
    <field name="id" type="string" indexed="true" stored="true" required="true" /> \r
    <field name="name" type="text" indexed="true" stored="true" required="true"/>\r
    <field name="tag" type="text" indexed="true" stored="true" multiValued="true"/>\r
+   <field name="owner" type="long" indexed="true" stored="true" required="true"/>\r
+   <field name="ureaders" type="long" indexed="true" stored="true" multiValued="true"/>\r
+   <field name="greaders" type="long" indexed="true" stored="true" multiValued="true"/>\r
+   <field name="public" type="boolean" indexed="true" stored="true" required="true"/>\r
 <!--   <field name="sku" type="textTight" indexed="true" stored="true" omitNorms="true"/>\r
    <field name="name" type="textgen" indexed="true" stored="true"/>\r
    <field name="alphaNameSort" type="alphaOnlySort" indexed="true" stored="false"/>\r
index 99d0be8..e1e6440 100644 (file)
@@ -55,4 +55,6 @@ public interface AdminService extends RemoteService {
        void removeUserClass(UserClassDTO userClass) throws RpcException,ObjectNotFoundException;
 
        void removeUser(Long userId) throws RpcException,ObjectNotFoundException,InsufficientPermissionsException;
+       
+       void fixSharedFlagForAllFoldersAndFiles() throws RpcException;
 }
index f07589b..fb3b26f 100644 (file)
@@ -50,4 +50,6 @@ public interface AdminServiceAsync {
        void removeUserClass(UserClassDTO userClass, AsyncCallback<Void> callback);
 
        void removeUser(Long userId, AsyncCallback<Void> callback);
+       
+       void fixSharedFlagForAllFoldersAndFiles( AsyncCallback<Void> callback);
 }
index 664753a..03b6297 100644 (file)
                                        </g:ScrollPanel>
 
                                </g:tab>
+                               
+                               <g:tab>
+                                       <g:header>Operations</g:header>
+                                       <g:ScrollPanel>
+                                       <adminui:OperationsPanel></adminui:OperationsPanel>
+                                       </g:ScrollPanel>
+
+                               </g:tab>
 
 
                        </g:TabLayoutPanel>
diff --git a/src/gr/ebs/gss/admin/client/ui/OperationsPanel.java b/src/gr/ebs/gss/admin/client/ui/OperationsPanel.java
new file mode 100644 (file)
index 0000000..ed01e11
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2010 Electronic Business Systems Ltd.
+ *
+ * This file is part of GSS.
+ *
+ * GSS 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.
+ *
+ * GSS 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 GSS.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package gr.ebs.gss.admin.client.ui;
+
+import gr.ebs.gss.admin.client.TwoAdmin;
+import gr.ebs.gss.admin.client.ui.FilesPanel.UserPanelUiBinder;
+import gr.ebs.gss.server.domain.dto.FileBodyDTO;
+import gr.ebs.gss.server.domain.dto.FileHeaderDTO;
+import gr.ebs.gss.server.domain.dto.PermissionDTO;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.gen2.table.event.client.RowSelectionEvent;
+import com.google.gwt.gen2.table.event.client.RowSelectionHandler;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.TextBox;
+import com.google.gwt.user.client.ui.Widget;
+
+
+/**
+ * @author kman
+ *
+ */
+public class OperationsPanel extends Composite {
+
+       private static UserPanelUiBinder uiBinder = GWT
+                       .create(UserPanelUiBinder.class);
+
+       interface UserPanelUiBinder extends UiBinder<Widget, OperationsPanel> {
+       }
+
+
+
+       
+       @UiField Button fixButton;
+       
+       public OperationsPanel() {
+               
+
+               initWidget(uiBinder.createAndBindUi(this));
+               
+
+       }
+
+       @UiHandler("fixButton")
+       void handleClick(@SuppressWarnings("unused") ClickEvent e){
+               DeferredCommand.addCommand(new Command() {
+
+                       @Override
+                       public void execute() {
+                               TwoAdmin.get().showLoadingBox();
+                               TwoAdmin.get().getAdminService().fixSharedFlagForAllFoldersAndFiles( new AsyncCallback<Void>() {
+                                       
+                                       @Override
+                                       public void onSuccess(Void result) {
+                                                               TwoAdmin.get().hideLoadingBox();
+                                       }
+
+                                       @Override
+                                       public void onFailure(Throwable caught) {
+                                               GWT.log("Error Fixing Permissions", caught);
+                                               TwoAdmin.get().hideLoadingBox();
+                                               TwoAdmin.get().showErrorBox("Error Fixing Permissions");
+
+                                       }
+                               });
+
+                       }
+               });
+       }
+
+
+
+       
+
+}
diff --git a/src/gr/ebs/gss/admin/client/ui/OperationsPanel.ui.xml b/src/gr/ebs/gss/admin/client/ui/OperationsPanel.ui.xml
new file mode 100644 (file)
index 0000000..02936b5
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+       xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:adminui='urn:import:gr.ebs.gss.admin.client.ui' 
+        xmlns:dp="urn:import:com.google.gwt.user.datepicker.client"
+       >
+       <ui:style>
+               
+       </ui:style>
+       
+       <g:VerticalPanel addStyleNames="Gmnuri3D" width="100%">
+               <g:HTMLPanel>
+                       <div>
+                               <h3>Administrative Operations</h3>
+                       </div>
+               </g:HTMLPanel>
+               <g:HorizontalPanel spacing="3">
+                       <g:cell horizontalAlignment="ALIGN_CENTER" verticalAlignment="ALIGN_MIDDLE">
+                               <g:HTML>Fix Sharing flag:</g:HTML>
+                       </g:cell>
+                       
+                       <g:cell horizontalAlignment="ALIGN_CENTER" verticalAlignment="ALIGN_MIDDLE">
+                               <g:Button ui:field="fixButton">Search</g:Button>
+                       </g:cell>
+                       
+               </g:HorizontalPanel>
+
+
+               
+       </g:VerticalPanel>
+
+</ui:UiBinder> 
\ No newline at end of file
index 2cd38ce..d45d0a2 100644 (file)
@@ -735,11 +735,11 @@ public class FileList extends Composite implements ClickHandler {
                                if(uname==null)
                                        uname = ((DnDTreeItem)folders.getSharesItem()).getOthersResource().getUsernameOfUri(otherUser.getOtherUserResource().getUri());
                                if(uname != null)
-                                       shared = file.isShared();
+                                       shared = file.getShared();
                        }
                }
                else
-                       shared = file.isShared();
+                       shared = file.getShared();
                if (mimetype == null)
                        return shared ? AbstractImagePrototype.create(images.documentShared()) : AbstractImagePrototype.create(images.document());
                mimetype = mimetype.toLowerCase();
@@ -815,45 +815,18 @@ public class FileList extends Composite implements ClickHandler {
                                                        public void onComplete() {
                                                                folderItem.setUserObject(getResult());
                                                                if(GSS.get().getFolders().isFileItem(folderItem)){
-                                                                       String[] filePaths = new String[folderItem.getFolderResource().getFilePaths().size()];
-                                                                       int c=0;
-                                                                       for(String fpath : folderItem.getFolderResource().getFilePaths()){
-                                                                               filePaths[c] = fpath + "?" + Math.random();
-                                                                               c++;
-                                                                       }
-                                                                       MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getFolderResource().getFileCache()){
-
-                                                                               @Override
-                                                                               public void onComplete(){
-                                                                                       List<FileResource> result = getResult();
+
                                                                                        //remove random from path
-                                                                                       for(FileResource r : result){
+                                                                       for(FileResource r : folderItem.getFolderResource().getFiles()){
                                                                                                String p = r.getUri();
                                                                                                int indexOfQuestionMark = p.lastIndexOf('?');
                                                                                                if(indexOfQuestionMark>0)
                                                                                                        r.setUri(p.substring(0, indexOfQuestionMark));
                                                                                                GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
                                                                                        }
-                                                                                       folderItem.getFolderResource().setFiles(result);
                                                                                        folderItem.getFolderResource().setFilesExpanded(true);
                                                                                        updateFileCache(clearSelection, newFilename);
                                                                                }
-
-                                                                               @Override
-                                                                               public void onError(String p, Throwable throwable) {
-                                                                                       if(throwable instanceof RestException)
-                                                                                               GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
-                                                                               }
-
-                                                                               @Override
-                                                                               public void onError(Throwable t) {
-                                                                                       GWT.log("", t);
-                                                                                       GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
-                                                                               }
-
-                                                                       };
-                                                                       DeferredCommand.addCommand(getFiles);
-                                                               }
                                                                else
                                                                        updateFileCache(clearSelection, newFilename);
                                                        }
@@ -894,45 +867,16 @@ public class FileList extends Composite implements ClickHandler {
                                        @Override
                                        public void onComplete() {
                                                folderItem.setUserObject(getResult());
-                                               updateFileCache(clearSelection, newFilename);
-                                               String[] filePaths = new String[folderItem.getSharedResource().getFilePaths().size()];
-                                               int c=0;
-                                               for(String fpath : folderItem.getSharedResource().getFilePaths()){
-                                                       filePaths[c] = fpath + "?" + Math.random();
-                                                       c++;
-                                               }
-                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getSharedResource().getFileCache()){
-
-                                                       @Override
-                                                       public void onComplete(){
-                                                               List<FileResource> result = getResult();
-                                                               //remove random from path
-                                                               for(FileResource r : result){
+                                               for(FileResource r : folderItem.getSharedResource().getFiles()){
                                                                        String p = r.getUri();
                                                                        int indexOfQuestionMark = p.lastIndexOf('?');
                                                                        if(indexOfQuestionMark>0)
                                                                                r.setUri(p.substring(0, indexOfQuestionMark));
                                                                        GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
                                                                }
-                                                               folderItem.getSharedResource().setFiles(result);
                                                                folderItem.getSharedResource().setFilesExpanded(true);
                                                                updateFileCache(clearSelection, newFilename);
-                                                       }
-
-                                                       @Override
-                                                       public void onError(String p, Throwable throwable) {
-                                                               if(throwable instanceof RestException)
-                                                                       GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
-                                                       }
-
-                                                       @Override
-                                                       public void onError(Throwable t) {
-                                                               GWT.log("", t);
-                                                               GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
-                                                       }
-
-                                               };
-                                               DeferredCommand.addCommand(getFiles);
+                                               
                                        }
 
                                        @Override
@@ -948,45 +892,17 @@ public class FileList extends Composite implements ClickHandler {
                                        @Override
                                        public void onComplete() {
                                                folderItem.setUserObject(getResult());
-                                               updateFileCache(clearSelection, newFilename);
-                                               String[] filePaths = new String[folderItem.getOtherUserResource().getFilePaths().size()];
-                                               int c=0;
-                                               for(String fpath : folderItem.getOtherUserResource().getFilePaths()){
-                                                       filePaths[c] = fpath + "?" + Math.random();
-                                                       c++;
-                                               }
-                                               MultipleHeadCommand<FileResource> getFiles = new MultipleHeadCommand<FileResource>(FileResource.class, filePaths, folderItem.getOtherUserResource().getFileCache()){
-
-                                                       @Override
-                                                       public void onComplete(){
-                                                               List<FileResource> result = getResult();
-                                                               //remove random from path
-                                                               for(FileResource r : result){
+                                               //updateFileCache(clearSelection, newFilename);
+                                               for(FileResource r : folderItem.getOtherUserResource().getFiles()){
                                                                        String p = r.getUri();
                                                                        int indexOfQuestionMark = p.lastIndexOf('?');
                                                                        if(indexOfQuestionMark>0)
                                                                                r.setUri(p.substring(0, indexOfQuestionMark));
                                                                        GWT.log("FETCHED:"+r.getLastModifiedSince(), null);
                                                                }
-                                                               folderItem.getOtherUserResource().setFiles(result);
                                                                folderItem.getOtherUserResource().setFilesExpanded(true);
                                                                updateFileCache(clearSelection, newFilename);
-                                                       }
-
-                                                       @Override
-                                                       public void onError(String p, Throwable throwable) {
-                                                               if(throwable instanceof RestException)
-                                                                       GSS.get().displayError("Unable to retrieve file details:"+((RestException)throwable).getHttpStatusText());
-                                                       }
-
-                                                       @Override
-                                                       public void onError(Throwable t) {
-                                                               GWT.log("", t);
-                                                               GSS.get().displayError("Unable to fetch files for folder " + folderItem.getFolderResource().getName());
-                                                       }
-
-                                               };
-                                               DeferredCommand.addCommand(getFiles);
+                                               
                                        }
 
                                        @Override
index 3fff9db..3f4a64e 100644 (file)
@@ -76,7 +76,28 @@ public class FileResource extends RestResource {
        String path;
 
        String folderName;
-
+       Boolean shared;
+       
+       
+       /**
+        * Retrieve the shared.
+        *
+        * @return the shared
+        */
+       public Boolean getShared() {
+               return shared;
+       }
+       
+       
+       /**
+        * Modify the shared.
+        *
+        * @param shared the shared to set
+        */
+       public void setShared(Boolean shared) {
+               this.shared = shared;
+       }
+       
        /**
         * Retrieve the folderName.
         *
@@ -415,7 +436,7 @@ public class FileResource extends RestResource {
                versioned = unmarshallBoolean(metadata, "versioned");
                createdBy = unmarshallString(metadata, "createdBy");
                modifiedBy = unmarshallString(metadata, "modifiedBy");
-
+               setShared(unmarshallBoolean(metadata, "shared"));
                if (metadata.get("version") != null)
                        version = new Integer(metadata.get("version").toString());
 
index de6c491..59e25c3 100644 (file)
@@ -80,6 +80,28 @@ public class FolderResource extends RestResource {
        private boolean filesExpanded=false;
 
        boolean readForAll;
+       
+       Boolean shared;
+       
+       
+       /**
+        * Retrieve the shared.
+        *
+        * @return the shared
+        */
+       public Boolean getShared() {
+               return shared;
+       }
+       
+       
+       /**
+        * Modify the shared.
+        *
+        * @param shared the shared to set
+        */
+       public void setShared(Boolean shared) {
+               this.shared = shared;
+       }
 
        /**
         * Modify the parentName.
@@ -342,6 +364,7 @@ public class FolderResource extends RestResource {
                createdBy = unmarshallString(json, "createdBy");
                modifiedBy = unmarshallString(json, "modifiedBy");
                deleted = unmarshallBoolean(json, "deleted");
+               shared = unmarshallBoolean(json, "shared");
                readForAll = unmarshallBoolean(json, "readForAll");
                if (deleted)
                        GWT.log("FOUND A DELETED FOLDER:" + name, null);
@@ -402,6 +425,7 @@ public class FolderResource extends RestResource {
                                                String fowner = unmarshallString(fo, "owner");
                                                String fcontent = unmarshallString(fo, "content");
                                                String fpath = unmarshallString(fo, "path");
+                                               Boolean fshared = unmarshallBoolean(fo, "shared");
                                                fpath = URL.decodeComponent(fpath);
                                                Integer fversion = null;
                                                if (fo.get("version") != null)
@@ -425,6 +449,7 @@ public class FolderResource extends RestResource {
                                                fs.setVersion(fversion);
                                                fs.setContentLength(fsize);
                                                fs.setDeleted(fdeleted);
+                                               fs.setShared(fshared);
                                                fs.setCreationDate(fcreationDate);
                                                fs.setModificationDate(fmodificationDate);
                                                fs.setContentType(fcontent);
index 1ec64c1..653fa5f 100644 (file)
@@ -198,6 +198,7 @@ public class OtherUserResource extends RestResource{
                                                fs.setDeleted(fdeleted);
                                                fs.setCreationDate(fcreationDate);
                                                fs.setModificationDate(fmodificationDate);
+                                               fs.setShared(unmarshallBoolean(fo,"shared"));
                                                fs.setContentType(fcontent);
                                                files.add(fs);
                                        }
index 65b0929..4a9f4cb 100644 (file)
@@ -180,6 +180,7 @@ public class SharedResource extends RestResource{
                                                fs.setVersion(fversion);
                                                fs.setContentLength(fsize);
                                                fs.setDeleted(fdeleted);
+                                               fs.setShared(unmarshallBoolean(fo,"shared"));
                                                fs.setCreationDate(fcreationDate);
                                                fs.setModificationDate(fmodificationDate);
                                                fs.setContentType(fcontent);
index b0e696a..8b52797 100644 (file)
@@ -172,4 +172,9 @@ public class AdminServiceImpl extends RemoteServiceServlet implements AdminServi
                getService().removeUser(userId);
 
        }
+
+       @Override
+       public void fixSharedFlagForAllFoldersAndFiles() throws RpcException {
+               getService().fixSharedFlagForAllFoldersAndFiles();              
+       }
 }
index ef14217..bf537a6 100644 (file)
@@ -38,6 +38,8 @@ import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;\r
 import javax.persistence.OneToMany;\r
 import javax.persistence.OrderBy;\r
+import javax.persistence.PrePersist;\r
+import javax.persistence.PreUpdate;\r
 import javax.persistence.Table;\r
 import javax.persistence.UniqueConstraint;\r
 import javax.persistence.Version;\r
@@ -151,6 +153,8 @@ public final class FileHeader  implements Serializable{
        @OneToMany(cascade = CascadeType.ALL)\r
        private Set<Permission> permissions = new HashSet<Permission>();\r
 \r
+       @Column(columnDefinition=" boolean DEFAULT false")\r
+       private Boolean shared;\r
        /**\r
         * Retrieve the ID.\r
         *\r
@@ -450,6 +454,7 @@ public final class FileHeader  implements Serializable{
                f.setMimeType(currentBody.getMimeType());\r
                f.setDeleted(deleted);\r
                f.setReadForAll(readForAll);\r
+               f.setShared(getShared());\r
                List<String> tags = new ArrayList<String>();\r
                for (FileTag tag : fileTags)\r
                        tags.add(tag.getTag());\r
@@ -562,5 +567,34 @@ public final class FileHeader  implements Serializable{
                return owner.getUsername() + PATH_FILES + getPath();\r
        }\r
 \r
+       /**\r
+        * Retrieve the shared.\r
+        *\r
+        * @return the shared\r
+        */\r
+       public Boolean getShared() {\r
+               if(shared==null)\r
+                       return false;\r
+               return shared;\r
+    }\r
+
+
+       /**\r
+        * Modify the shared.\r
+        *\r
+        * @param shared the shared to set\r
+        */\r
+       public void setShared(Boolean shared) {\r
+               this.shared = shared;\r
+       }\r
+       \r
+       @PrePersist\r
+       @PreUpdate\r
+       private void fixSharedFlag(){\r
+               if(isReadForAll()||getPermissions().size()>1)\r
+                       shared=true;\r
+               else\r
+                       shared=false;\r
+       }\r
 }\r
 \r
index 3825bec..d3ce903 100644 (file)
@@ -39,6 +39,8 @@ import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;\r
 import javax.persistence.OneToMany;\r
 import javax.persistence.OrderBy;\r
+import javax.persistence.PrePersist;\r
+import javax.persistence.PreUpdate;\r
 import javax.persistence.Version;\r
 \r
 import org.hibernate.annotations.Cache;\r
@@ -128,6 +130,9 @@ public final class Folder  implements Serializable{
         */\r
        @Column(columnDefinition=" boolean DEFAULT false")\r
        private boolean readForAll=false;\r
+       \r
+       @Column(columnDefinition=" boolean DEFAULT false")\r
+       private Boolean shared;\r
 \r
        /**\r
         * Retrieve the ID.\r
@@ -384,6 +389,7 @@ public final class Folder  implements Serializable{
                f.setAuditInfo(auditInfo.getDTO());\r
                f.setDeleted(deleted);\r
                f.setReadForAll(readForAll);\r
+               f.setShared(getShared());\r
                if (parent != null)\r
                        f.setParent(parent.getDTO(0));\r
                for (Folder subfolder : subfolders)\r
@@ -537,6 +543,36 @@ public final class Folder  implements Serializable{
        public boolean isReadForAll() {\r
                return readForAll;\r
        }\r
+       \r
+       /**\r
+        * Retrieve the shared.\r
+        *\r
+        * @return the shared\r
+        */\r
+       public Boolean getShared() {\r
+               if(shared==null)\r
+                       return false;\r
+               return shared;\r
+       }\r
+       \r
+       \r
+       /**\r
+        * Modify the shared.\r
+        *\r
+        * @param shared the shared to set\r
+        */\r
+       public void setShared(Boolean shared) {\r
+               this.shared = shared;\r
+       }\r
+       \r
+       @PrePersist\r
+       @PreUpdate\r
+       private void fixSharedFlag(){\r
+               if(isReadForAll()||getPermissions().size()>1)\r
+                       shared=true;\r
+               else\r
+                       shared=false;\r
+       }\r
 \r
        /**\r
         * Retrieve the URI for this resource, relative to the REST API root URI.\r
index 9a64d0d..af3a62d 100644 (file)
@@ -22,6 +22,8 @@ import java.io.Serializable;
 import java.util.List;
 import java.util.Set;
 
+import javax.persistence.Column;
+
 import com.google.gwt.i18n.client.NumberFormat;
 
 /**
@@ -115,6 +117,9 @@ public class FileHeaderDTO implements Serializable {
         * Anyone can read this file?
         */
        private boolean readForAll=false;
+       
+       
+       private Boolean shared=false;
        /**
         * @return the id
         */
@@ -411,4 +416,23 @@ public class FileHeaderDTO implements Serializable {
        public Set<PermissionDTO> getPermissions() {
                return permissions;
        }
+       
+       /**
+        * Retrieve the shared.
+        *
+        * @return the shared
+        */
+       public Boolean getShared() {
+               return shared;
+       }
+       
+       
+       /**
+        * Modify the shared.
+        *
+        * @param shared the shared to set
+        */
+       public void setShared(Boolean shared) {
+               this.shared = shared;
+       }
 }
index 22be12a..097a2f2 100644 (file)
@@ -77,6 +77,8 @@ public class FolderDTO implements Serializable {
         * Anyone can read this folder?
         */
        private boolean readForAll=false;
+       
+       private Boolean shared=false;
 
        /**
         * @return the id
@@ -238,5 +240,24 @@ public class FolderDTO implements Serializable {
        public boolean isReadForAll() {
                return readForAll;
        }
-
+       
+       
+       /**
+        * Retrieve the shared.
+        *
+        * @return the shared
+        */
+       public Boolean getShared() {
+               return shared;
+       }
+       
+       
+       /**
+        * Modify the shared.
+        *
+        * @param shared the shared to set
+        */
+       public void setShared(Boolean shared) {
+               this.shared = shared;
+       }
 }
index 1bb3142..68d6d5f 100644 (file)
@@ -80,4 +80,9 @@ public interface AdminAPI {
 
        public void removeUser(Long userId) throws ObjectNotFoundException, InsufficientPermissionsException;
 
+       /**
+        * 
+        */
+       void fixSharedFlagForAllFoldersAndFiles();
+
 }
index f1e868a..0bd1a80 100644 (file)
@@ -539,4 +539,8 @@ public class AdminAPIBean implements AdminAPI {
                        }
                }
        }
+       @Override
+       public void fixSharedFlagForAllFoldersAndFiles(){
+               dao.fixSharedFlagForAllFoldersAndFiles();
+       }
 }
index fecf7e6..8beefa0 100644 (file)
@@ -717,7 +717,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote {
                touchParentFolders(parent, user, new Date());
 
                // Re-index the file if it was modified.
-               if (name != null || tagSet != null)
+               if (name != null || tagSet != null || (permissions != null && !permissions.isEmpty()) || readForAll != null)
                        indexFile(fileId, false);
        }
 
@@ -1812,7 +1812,20 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote {
                List<FileHeader> result = new ArrayList<FileHeader>();
                try {
                        CommonsHttpSolrServer solr = new CommonsHttpSolrServer(getConfiguration().getString("solr.url"));
-                       SolrQuery solrQuery = new SolrQuery(escapeCharacters(normalizeSearchQuery(query)));
+            List<Group> groups = dao.getGroupsContainingUser(userId);
+            String constructedQuery = escapeCharacters(normalizeSearchQuery(query)) + " AND (public: true OR ureaders: " + userId;
+            if (!groups.isEmpty()) {
+                constructedQuery += " OR (";
+                for (int i=0; i<groups.size(); i++) {
+                    Group g = groups.get(i);
+                    constructedQuery += "greaders :" + g.getId();
+                    if (i < groups.size() - 1)
+                        constructedQuery += " OR ";
+                }
+                constructedQuery += ")";
+            }
+            constructedQuery += ")";
+                       SolrQuery solrQuery = new SolrQuery(constructedQuery);
             solrQuery.setRows(maxRows);
             long startTime = System.currentTimeMillis();
                        QueryResponse response = solr.query(solrQuery);
@@ -1830,14 +1843,13 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote {
                                Long id = Long.valueOf((String) d.getFieldValue("id"));
                                try {
                                        FileHeader f = dao.getEntityById(FileHeader.class, id);
-                                       if (f.hasReadPermission(user))
-                                               result.add(f);
+                                       result.add(f);
                                } catch (ObjectNotFoundException e) {
                                        logger.warn("Search result id " + id + " cannot be found", e);
                                }
                        }
             stopTime = System.currentTimeMillis();
-            logger.info("Permission checks: " + (stopTime - startTime));
+            logger.info("File loads: " + (stopTime - startTime));
                } catch (MalformedURLException e) {
                        logger.error(e);
                        throw new EJBException(e);
@@ -2125,7 +2137,7 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote {
                        }
             if (i % 100 == 0) {
                 solr.commit();
-                logger.debug("Sent commit to solr at file " + i);
+                logger.info("Sent commit to solr at file " + i);
             }
                        solr.optimize();
                        solr.commit();
@@ -2656,24 +2668,33 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote {
                                for (FileTag t : file.getFileTags()) {
                                        solrRequest.getParams().add("literal.tag", t.getTag());
                                }
+                for (Permission p : file.getPermissions()) {
+                    if (p.getRead()) {
+                        if (p.getUser() != null)
+                            solrRequest.setParam("literal.ureaders", p.getUser().getId().toString());
+                        else if (p.getGroup() != null)
+                            solrRequest.setParam("literal.greaders", p.getGroup().getId().toString());
+                    }
+                }
+                solrRequest.setParam("literal.owner", file.getOwner().getId().toString());
+                solrRequest.setParam("literal.public", String.valueOf(file.isReadForAll()));
                 File fsFile = new File(body.getStoredFilePath());
                                solrRequest.addFile(fsFile);
-//                             solrRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
                                try {
                                        solr.request(solrRequest);
                                }
                                catch (SolrException e) {
-                                       logger.warn("File " + id + " failed with " + e.getLocalizedMessage() + ". Retrying without the file");
+                                       logger.warn("File " + id + " failed with SolrException: " + e.getLocalizedMessage() + ". Retrying without the file");
                                        //Let 's try without the file
                                        sendMetaDataOnly(solr, file);
                                }
                                catch (NullPointerException e) {
-                                       logger.warn("File " + id + " failed with " + e.getLocalizedMessage() + ". Retrying without the file");
+                                       logger.warn("File " + id + " failed with NullPointerException: " + e.getLocalizedMessage() + ". Retrying without the file");
                                        //Let 's try without the file
                                        sendMetaDataOnly(solr, file);
                                }
                                catch (SolrServerException e) {
-                                       logger.warn("File " + id + " failed with " + e.getLocalizedMessage() + ". Retrying without the file");
+                                       logger.warn("File " + id + " failed with SolrServerException: " + e.getLocalizedMessage() + ". Retrying without the file");
                                        //Let 's try without the file
                                        sendMetaDataOnly(solr, file);
                                }
@@ -2696,6 +2717,16 @@ public class ExternalAPIBean implements ExternalAPI, ExternalAPIRemote {
                for (FileTag t : file.getFileTags()) {
                        solrDoc.addField("tag", t.getTag());
                }
+        for (Permission p : file.getPermissions()) {
+            if (p.getRead()) {
+                if (p.getUser() != null)
+                    solrDoc.addField("ureaders", p.getUser().getId());
+                else if (p.getGroup() != null)
+                    solrDoc.addField("greaders", p.getGroup().getId());
+            }
+        }
+        solrDoc.addField("owner", file.getOwner().getId());
+        solrDoc.addField("public", file.isReadForAll());
                solr.add(solrDoc);
        }
 
index 73fd152..77804de 100644 (file)
@@ -513,4 +513,9 @@ public interface GSSDAO {
         */
        public List<UserLogin> getLoginsForUser (Long userId);
 
+       /**
+        * 
+        */
+       void fixSharedFlagForAllFoldersAndFiles();
+
 }
index a3a6af3..f7215e0 100644 (file)
@@ -739,6 +739,7 @@ public class GSSDAOBean implements GSSDAO {
     public FileHeader getFileForIndexing(Long id) throws ObjectNotFoundException {
         FileHeader h = getEntityById(FileHeader.class, id);
         h.getFileTags().size();
+        h.getPermissions().size();
         return h;
     }
        
@@ -768,4 +769,22 @@ public class GSSDAOBean implements GSSDAO {
                                                                .getResultList();
                return res;                                                                     
        }
+
+       @Override
+       public void fixSharedFlagForAllFoldersAndFiles(){
+               List<Folder> folders = manager.createQuery("select f from Folder f").getResultList();
+               for(Folder f : folders){
+                       if(f.isReadForAll()||f.getPermissions().size()>1){
+                               f.setShared(true);
+                               update(f);
+                       }
+               }
+               List<FileHeader> files = manager.createQuery("select f from FileHeader f").getResultList();
+               for(FileHeader f : files){
+                       if(f.isReadForAll()||f.getPermissions().size()>1){
+                               f.setShared(true);
+                               update(f);
+                       }
+               }
+       }
 }
index 608267f..109f3b1 100644 (file)
@@ -1916,6 +1916,7 @@ public class FilesHandler extends RequestHandler {
                                        put("createdBy", folder.getAuditInfo().getCreatedBy().getUsername()).
                                        put("creationDate", folder.getAuditInfo().getCreationDate().getTime()).
                                        put("deleted", folder.isDeleted()).
+                                       put("shared", folder.getShared()).
                                        put("readForAll", folder.isReadForAll());
 
                        if (folder.getAuditInfo().getModifiedBy() != null)
@@ -1946,6 +1947,8 @@ public class FilesHandler extends RequestHandler {
                                        put("version", f.getVersion()).
                                        put("content", f.getMimeType()).
                                        put("size", f.getFileSize()).
+                                       put("shared", f.getShared()).
+                                       put("versioned",f.isVersioned()).
                                        put("creationDate", f.getAuditInfo().getCreationDate().getTime()).
                                        put("path", f.getFolder().getPath()).
                                        put("uri", getApiRoot() + f.getURI());
@@ -2036,6 +2039,7 @@ public class FilesHandler extends RequestHandler {
                                        put("versioned", file.isVersioned()).
                                        put("version", oldBody != null ? oldBody.getVersion() : file.getVersion()).
                                        put("readForAll", file.isReadForAll()).
+                                       put("shared", file.getShared()).
                                        put("tags", renderJson(file.getTags())).
                                        put("path", file.getFolder().getPath()).
                                put("uri", getApiRoot() + file.getURI()).
index 8543c84..db668ea 100644 (file)
@@ -130,6 +130,8 @@ public class OthersHandler extends RequestHandler {
                                        put("creationDate", f.getAuditInfo().getCreationDate().getTime()).
                                        put("modificationDate", f.getAuditInfo().getModificationDate().getTime()).
                                        put("path", f.getFolder().getPath()).
+                                       put("shared", f.getShared()).
+                                       put("versioned",f.isVersioned()).
                                        put("uri", getApiRoot() + f.getURI());
                                files.add(j);
                }
index b2b5d23..1b784fa 100644 (file)
@@ -95,6 +95,8 @@ public class SharedHandler extends RequestHandler {
                                        put("size", f.getFileSize()).
                                        put("content", f.getMimeType()).
                                        put("path", f.getFolder().getPath()).
+                                       put("shared", f.getShared()).
+                                       put("versioned",f.isVersioned()).
                                        put("creationDate", f.getAuditInfo().getCreationDate().getTime()).
                                        put("modificationDate", f.getAuditInfo().getModificationDate().getTime()).
                                        put("uri", getApiRoot() + f.getURI());