[jboss-svn-commits] JBL Code SVN: r35958 - in labs/jbossrules/trunk: drools-guvnor/src/main/java/org/drools/guvnor/client/explorer and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 12 08:54:38 EST 2010


Author: ge0ffrey
Date: 2010-11-12 08:54:37 -0500 (Fri, 12 Nov 2010)
New Revision: 35958

Added:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRequest.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageResponse.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRow.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetTable.java
Modified:
   labs/jbossrules/trunk/drools-docs/drools-docs-guvnor/src/main/docbook/en-US/Chapter-Guvnor/Section-AdminGuide.xml
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesTree.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/TabOpener.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java
Log:
GUVNOR-804 + GUVNOR-686: grid based on celltable prototype

Modified: labs/jbossrules/trunk/drools-docs/drools-docs-guvnor/src/main/docbook/en-US/Chapter-Guvnor/Section-AdminGuide.xml
===================================================================
--- labs/jbossrules/trunk/drools-docs/drools-docs-guvnor/src/main/docbook/en-US/Chapter-Guvnor/Section-AdminGuide.xml	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-docs/drools-docs-guvnor/src/main/docbook/en-US/Chapter-Guvnor/Section-AdminGuide.xml	2010-11-12 13:54:37 UTC (rev 35958)
@@ -417,16 +417,6 @@
     </section>
 
     <section>
-      <title>Asset list customization</title>
-
-      <para>In a few places in Guvnor there is an asset list: this list can be
-      customized by looking for the AssetListTable.properties file. You can
-      then set the header names and the "getter" methods that are used to
-      populate the columns. eg you could add in getCreator, or
-      getExternalSource as extra fields if you were using them.</para>
-    </section>
-
-    <section>
       <title>Selectors for package building</title>
       
       <para>When building packages (from the "Packages" feature) you have the

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesTree.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesTree.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/explorer/PackagesTree.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -16,6 +16,7 @@
 
 package org.drools.guvnor.client.explorer;
 
+import java.util.Arrays;
 import java.util.Map;
 
 import org.drools.guvnor.client.common.GenericCallback;
@@ -207,7 +208,7 @@
                 opener.openPackageViewAssets( packageConfigData.uuid,
                                               packageConfigData.name,
                                               key,
-                                              formats,
+                                              Arrays.asList(formats),
                                               node.getText() );
             } else {
                 throw new IllegalArgumentException("The userObject (" + userObject + ") is not supported.");

Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRequest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRequest.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.guvnor.client.rpc;
+
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * The request which contains filter properties, paging properties, etc.
+ * @see AssetPageResponse
+ * @author Geoffrey De Smet
+ */
+public class AssetPageRequest
+        implements IsSerializable {
+
+    // Filter properties: null properties are ignored for filtering
+    private String packageUuid = null;
+    private List<String> formatInList = null;
+    private Boolean formatIsRegistered = null;
+
+    private int startRowIndex = 0;
+    private Integer pageSize = null; // null returns all pages
+
+    // ************************************************************************
+    // Getters and setters
+    // ************************************************************************
+
+    public String getPackageUuid() {
+        return packageUuid;
+    }
+
+    public void setPackageUuid(String packageUuid) {
+        this.packageUuid = packageUuid;
+    }
+
+    public List<String> getFormatInList() {
+        return formatInList;
+    }
+
+    public void setFormatInList(List<String> formatInList) {
+        this.formatInList = formatInList;
+    }
+
+    public Boolean getFormatIsRegistered() {
+        return formatIsRegistered;
+    }
+
+    public void setFormatIsRegistered(Boolean formatIsRegistered) {
+        this.formatIsRegistered = formatIsRegistered;
+    }
+
+    public int getStartRowIndex() {
+        return startRowIndex;
+    }
+
+    public void setStartRowIndex(int startRowIndex) {
+        this.startRowIndex = startRowIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageResponse.java (from rev 35862, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/TableDataResult.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageResponse.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageResponse.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.guvnor.client.rpc;
+
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * A page of an assets table, contains a list of asset summaries/headers.
+ * @see AssetPageRequest
+ * @author Geoffrey De Smet
+ */
+public class AssetPageResponse
+        implements IsSerializable {
+
+    private int totalRowSize;
+    private int startRowIndex;
+    private List<AssetPageRow> assetPageRowList;
+    private boolean lastPage;
+
+    public boolean isFirstPage() {
+        return startRowIndex == 0L;
+    }
+
+    // ************************************************************************
+    // Getters and setters
+    // ************************************************************************
+
+    public int getTotalRowSize() {
+        return totalRowSize;
+    }
+
+    public void setTotalRowSize(int totalRowSize) {
+        this.totalRowSize = totalRowSize;
+    }
+
+    public int getStartRowIndex() {
+        return startRowIndex;
+    }
+
+    public void setStartRowIndex(int startRowIndex) {
+        this.startRowIndex = startRowIndex;
+    }
+
+    public List<AssetPageRow> getAssetPageRowList() {
+        return assetPageRowList;
+    }
+
+    public void setAssetPageRowList(List<AssetPageRow> assetPageRowList) {
+        this.assetPageRowList = assetPageRowList;
+    }
+
+    public boolean isLastPage() {
+        return lastPage;
+    }
+
+    public void setLastPage(boolean lastPage) {
+        this.lastPage = lastPage;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageResponse.java
___________________________________________________________________
Name: svn:eol-style
   + native

Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRow.java (from rev 35862, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/TableDataRow.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRow.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRow.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.guvnor.client.rpc;
+
+import java.util.Date;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+/**
+ * A single row of a page of an assets table. This is an asset summary/header.
+ * @author Geoffrey De Smet
+ */
+public class AssetPageRow
+    implements IsSerializable, Comparable<AssetPageRow> {
+
+    private String uuid;
+    private String format; // TODO should be an enum
+    private String packageName;
+    private String name;
+    private String description;
+    private String stateName;
+    private String creator;
+    private Date createdDate;
+    private String lastContributor;
+    private Date lastModified;
+    private String categorySummary;
+    private String externalSource;
+
+    public int compareTo(AssetPageRow other) {
+        return uuid.compareTo(other.uuid);
+    }
+
+    // ************************************************************************
+    // Getters and setters
+    // ************************************************************************
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getFormat() {
+        return format;
+    }
+
+    public void setFormat(String format) {
+        this.format = format;
+    }
+
+    public String getPackageName() {
+        return packageName;
+    }
+
+    public void setPackageName(String packageName) {
+        this.packageName = packageName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getStateName() {
+        return stateName;
+    }
+
+    public void setStateName(String stateName) {
+        this.stateName = stateName;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public Date getCreatedDate() {
+        return createdDate;
+    }
+
+    public void setCreatedDate(Date createdDate) {
+        this.createdDate = createdDate;
+    }
+
+    public String getLastContributor() {
+        return lastContributor;
+    }
+
+    public void setLastContributor(String lastContributor) {
+        this.lastContributor = lastContributor;
+    }
+
+    public Date getLastModified() {
+        return lastModified;
+    }
+
+    public void setLastModified(Date lastModified) {
+        this.lastModified = lastModified;
+    }
+
+    public String getCategorySummary() {
+        return categorySummary;
+    }
+
+    public void setCategorySummary(String categorySummary) {
+        this.categorySummary = categorySummary;
+    }
+
+    public String getExternalSource() {
+        return externalSource;
+    }
+
+    public void setExternalSource(String externalSource) {
+        this.externalSource = externalSource;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/AssetPageRow.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryService.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -201,6 +201,14 @@
     public ValidatedResponse savePackage(PackageConfigData data) throws SerializationException;
 
     /**
+     * Supports filtering and pagination.
+     * @param request never null, contains filter and pagination values
+     * @return never null, contains the {@link List} of {@link AssetPageRow}
+     * @throws SerializationException
+     */
+    public AssetPageResponse findAssetPage(AssetPageRequest request) throws SerializationException;
+
+    /**
      * Given a format, this will return assets that match.
      * It can also be used for "pagination" by passing in start and
      * finish row numbers.
@@ -208,6 +216,7 @@
      * @param format The format to filter on. If this is empty - it will look for all non "known" asset types (ie "misc" stuff).
      * @param numRows The number of rows to return. -1 means all.
      * @param startRow The starting row number if paging - if numRows is -1 then this is ignored.
+     * @deprecated by {@link #findAssetPage(AssetPageRequest)}
      */
     public TableDataResult listAssets(String packageUUID,
                                       String formats[],
@@ -624,4 +633,4 @@
      public String processTemplate(String name, Map<String, Object> data);
      
      public Boolean isHostedMode();
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rpc/RepositoryServiceAsync.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -16,9 +16,7 @@
 
 package org.drools.guvnor.client.rpc;
 
-import java.util.Map;
 
-
 /**
  * 
  * This is what the remote service will implement, as a servlet.
@@ -63,6 +61,7 @@
 	void getCustomSelectors(com.google.gwt.user.client.rpc.AsyncCallback<java.lang.String[]> arg1);
 	void installSampleRepository(com.google.gwt.user.client.rpc.AsyncCallback<java.lang.Void> arg1);
 	void listArchivedPackages(com.google.gwt.user.client.rpc.AsyncCallback<org.drools.guvnor.client.rpc.PackageConfigData[]> arg1);
+    void findAssetPage(org.drools.guvnor.client.rpc.AssetPageRequest request, com.google.gwt.user.client.rpc.AsyncCallback<org.drools.guvnor.client.rpc.AssetPageResponse> cb);
 	void listAssets(java.lang.String packageUUID, java.lang.String[] formats, int skip, int numRows, java.lang.String tableConfig, com.google.gwt.user.client.rpc.AsyncCallback<org.drools.guvnor.client.rpc.TableDataResult> arg6);
 	void listAvailablePermissionTypes(com.google.gwt.user.client.rpc.AsyncCallback<java.lang.String[]> arg1);
 	void listPackages(com.google.gwt.user.client.rpc.AsyncCallback<org.drools.guvnor.client.rpc.PackageConfigData[]> arg1);
@@ -111,5 +110,5 @@
 	void unLockAsset(java.lang.String uuid, com.google.gwt.user.client.rpc.AsyncCallback<java.lang.Void> arg2);
 	void updateUserPermissions(java.lang.String userName, java.util.Map<java.lang.String, java.util.List<java.lang.String>> perms, com.google.gwt.user.client.rpc.AsyncCallback<java.lang.Void> arg3);
 	void processTemplate(java.lang.String name, java.util.Map<String, Object> data, com.google.gwt.user.client.rpc.AsyncCallback<java.lang.String> arg4);
-        void isHostedMode(com.google.gwt.user.client.rpc.AsyncCallback<java.lang.Boolean> arg1);
+    void isHostedMode(com.google.gwt.user.client.rpc.AsyncCallback<java.lang.Boolean> arg1);
 }

Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetTable.java (from rev 35869, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetItemGrid.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetTable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/rulelist/AssetTable.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -0,0 +1,305 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.guvnor.client.rulelist;
+
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.google.gwt.cell.client.DateCell;
+import com.google.gwt.cell.client.ImageCell;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.user.cellview.client.CellTable;
+import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.SimplePager;
+import com.google.gwt.user.cellview.client.TextColumn;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.HTML;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.view.client.AsyncDataProvider;
+import com.google.gwt.view.client.HasData;
+import com.google.gwt.view.client.MultiSelectionModel;
+import com.google.gwt.view.client.ProvidesKey;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import org.drools.guvnor.client.common.GenericCallback;
+import org.drools.guvnor.client.messages.Constants;
+import org.drools.guvnor.client.rpc.AssetPageRequest;
+import org.drools.guvnor.client.rpc.AssetPageResponse;
+import org.drools.guvnor.client.rpc.RepositoryServiceAsync;
+import org.drools.guvnor.client.rpc.RepositoryServiceFactory;
+import org.drools.guvnor.client.rpc.AssetPageRow;
+import org.drools.guvnor.client.ruleeditor.EditorLauncher;
+import org.drools.guvnor.client.ruleeditor.MultiViewRow;
+import org.drools.guvnor.client.table.ColumnPicker;
+import org.drools.guvnor.client.table.SelectionColumn;
+import org.drools.guvnor.client.table.SortableHeader;
+import org.drools.guvnor.client.table.SortableHeaderGroup;
+
+/**
+ * Shows a table of assets.
+ * @author Geoffrey De Smet
+ */
+public class AssetTable extends Composite {
+
+    private static final Constants constants = GWT.create(Constants.class);
+    private RepositoryServiceAsync repositoryService = RepositoryServiceFactory.getService(); // TODO use (C)DI
+
+    private final String packageUuid;
+    private final List<String> formatInList;
+    private final EditItemEvent editEvent;
+    private int pageSize = 50; // TODO might need to be configurable, or a constant
+    private String feedURL;
+    private Set<Command> unloadListenerSet = new HashSet<Command>();
+
+    private VerticalPanel layout;
+    private CellTable<AssetPageRow> cellTable;
+    private AsyncDataProvider<AssetPageRow> dataProvider;
+    private SimplePager pager;
+    private MultiSelectionModel<AssetPageRow> selectionModel;
+
+    public AssetTable(String packageUuid, List<String> formatInList, EditItemEvent event) {
+        this(packageUuid, formatInList, event, null);
+    }
+
+    public AssetTable(String packageUuid, List<String> formatInList, final EditItemEvent event, String feedURL) {
+        this.packageUuid = packageUuid;
+        this.formatInList = formatInList;
+        this.editEvent = event;
+        this.feedURL = feedURL;
+        this.layout = new VerticalPanel();
+        doCellTable();
+        initWidget(layout);
+    }
+
+    private void doCellTable() {
+        ProvidesKey<AssetPageRow> providesKey = new ProvidesKey<AssetPageRow>() {
+            public Object getKey(AssetPageRow row) {
+                return row.getUuid();
+            }
+        };
+        cellTable = new CellTable<AssetPageRow>(providesKey);
+        selectionModel = new MultiSelectionModel<AssetPageRow>(providesKey);
+        cellTable.setSelectionModel(selectionModel);
+        SelectionColumn.createAndAddSelectionColumn(cellTable);
+
+        ColumnPicker<AssetPageRow> columnPicker = new ColumnPicker<AssetPageRow>(cellTable);
+        SortableHeaderGroup sortableHeaderGroup = new SortableHeaderGroup<AssetPageRow>(cellTable);
+
+        final TextColumn<AssetPageRow> uuidNumberColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getUuid();
+            }
+        };
+        columnPicker.addColumn(uuidNumberColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "uuid TODO", uuidNumberColumn), false); // TODO i18n
+
+        Column<AssetPageRow, String> formatColumn = new Column<AssetPageRow, String>(new ImageCell()) {
+            public String getValue(AssetPageRow row) {
+                return "images/" + EditorLauncher.getAssetFormatIcon(row.getFormat());
+            }
+        };
+        columnPicker.addColumn(formatColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "format TODO", formatColumn), true); // TODO i18n
+
+        TextColumn<AssetPageRow> packageNameColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getPackageName();
+            }
+        };
+        columnPicker.addColumn(packageNameColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "packageName TODO", packageNameColumn), false);
+
+        TextColumn<AssetPageRow> nameColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getName();
+            }
+        };
+        columnPicker.addColumn(nameColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, constants.name(), nameColumn), true);
+
+        TextColumn<AssetPageRow> descriptionColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getDescription();
+            }
+        };
+        columnPicker.addColumn(descriptionColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "description TODO", descriptionColumn), true);
+
+        TextColumn<AssetPageRow> stateNameColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getStateName();
+            }
+        };
+        columnPicker.addColumn(stateNameColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "stateName TODO", stateNameColumn), true);
+
+        TextColumn<AssetPageRow> creatorColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getCreator();
+            }
+        };
+        columnPicker.addColumn(creatorColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "creator TODO", creatorColumn), false); // TODO i18n
+
+        Column<AssetPageRow, Date> createdDateColumn = new Column<AssetPageRow, Date>(new DateCell(
+                DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_MEDIUM))) {
+            public Date getValue(AssetPageRow row) {
+                return row.getCreatedDate();
+            }
+        };
+        columnPicker.addColumn(createdDateColumn, new SortableHeader<AssetPageRow, Date>(
+                sortableHeaderGroup, "createdDate TODO", createdDateColumn), false); // TODO i18n
+
+        TextColumn<AssetPageRow> lastContributorColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getLastContributor();
+            }
+        };
+        columnPicker.addColumn(lastContributorColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "lastContributor TODO", lastContributorColumn), false); // TODO i18n
+
+        Column<AssetPageRow, Date> lastModifiedColumn = new Column<AssetPageRow, Date>(new DateCell(
+                DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_MEDIUM))) {
+            public Date getValue(AssetPageRow row) {
+                return row.getLastModified();
+            }
+        };
+        columnPicker.addColumn(lastModifiedColumn, new SortableHeader<AssetPageRow, Date>(
+                sortableHeaderGroup, "lastModified TODO", lastModifiedColumn), true); // TODO i18n
+
+        TextColumn<AssetPageRow> categorySummaryColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getCategorySummary();
+            }
+        };
+        columnPicker.addColumn(categorySummaryColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "categorySummary TODO", categorySummaryColumn), false); // TODO i18n
+
+        TextColumn<AssetPageRow> externalSourceColumn = new TextColumn<AssetPageRow>() {
+            public String getValue(AssetPageRow row) {
+                return row.getExternalSource();
+            }
+        };
+        columnPicker.addColumn(externalSourceColumn, new SortableHeader<AssetPageRow, String>(
+                sortableHeaderGroup, "externalSource TODO", externalSourceColumn), false); // TODO i18n
+
+        cellTable.setPageSize(pageSize);
+        cellTable.setWidth("100%");
+
+        pager = new SimplePager();
+        pager.setDisplay(cellTable);
+
+        dataProvider = new AsyncDataProvider<AssetPageRow>() {
+            protected void onRangeChanged(HasData<AssetPageRow> display) {
+                AssetPageRequest request = new AssetPageRequest();
+                request.setPackageUuid(packageUuid);
+                request.setFormatInList(formatInList);
+                request.setStartRowIndex(pager.getPageStart());
+                request.setPageSize(pageSize);
+                repositoryService.findAssetPage(request,
+                        new GenericCallback<AssetPageResponse>() {
+                            public void onSuccess(AssetPageResponse response) {
+                                updateRowCount(response.getTotalRowSize(), true);
+                                updateRowData(response.getStartRowIndex(), response.getAssetPageRowList());
+                            }
+                        });
+            }
+        };
+        dataProvider.addDataDisplay(cellTable);
+
+        HorizontalPanel tableHeaderPanel = new HorizontalPanel();
+        Button refreshButton = new Button(constants.refreshList());
+        refreshButton.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                refresh();
+            }
+        });
+        tableHeaderPanel.add(refreshButton);
+        Button openSelectedButton = new Button(constants.openSelected());
+        openSelectedButton.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                Set<AssetPageRow> selectedSet = selectionModel.getSelectedSet();
+                for (AssetPageRow selected : selectedSet) {
+                    // TODO directly push the selected AssetPageRow
+                    editEvent.open(selected.getUuid());
+                }
+            }
+        });
+        tableHeaderPanel.add(openSelectedButton);
+        Button openSelectedToSingleTabButton = new Button(constants.openSelectedToSingleTab());
+        openSelectedToSingleTabButton.addListener(new ButtonListenerAdapter() {
+            @Override
+            public void onClick(Button button, EventObject e) {
+                Set<AssetPageRow> selectedSet = selectionModel.getSelectedSet();
+                // TODO directly push the selected AssetPageRows
+                List<MultiViewRow> multiViewRowList = new ArrayList<MultiViewRow>(selectedSet.size());
+                for (AssetPageRow selected : selectedSet) {
+                    MultiViewRow row = new MultiViewRow();
+                    row.uuid = selected.getUuid();
+                    row.format = selected.getFormat();
+                    row.name = selected.getName();
+                    multiViewRowList.add(row);
+                }
+                editEvent.open(multiViewRowList.toArray(new MultiViewRow[multiViewRowList.size()]));
+            }
+        });
+        tableHeaderPanel.add(openSelectedToSingleTabButton);
+        tableHeaderPanel.add(columnPicker.createToggleButton());
+
+        if (feedURL != null) {
+            // TODO use image resources to get the feed.png and use image button or something like that
+            HTML feedButton = new HTML("<a href='" + feedURL + "' target='_blank'><img src='images/feed.png'/></a>");
+            tableHeaderPanel.add(feedButton);
+        }
+        layout.add(tableHeaderPanel);
+        layout.add(cellTable);
+        layout.add(pager);
+    }
+
+    /**
+     * Refreshes the data. Does not rebuild the GUI.
+     */
+    public void refresh() {
+        cellTable.setVisibleRangeAndClearData(cellTable.getVisibleRange(), true);
+    }
+
+    /**
+     * @param unloadListener never null
+     */
+    public void addUnloadListener(Command unloadListener) {
+        unloadListenerSet.add(unloadListener);
+    }
+
+    @Override
+    protected void onUnload() {
+        super.onUnload();
+        for (Command unloadListener : unloadListenerSet) {
+            unloadListener.execute();
+        }
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/TabOpener.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/TabOpener.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/util/TabOpener.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -16,6 +16,7 @@
 package org.drools.guvnor.client.util;
 
 import java.util.Arrays;
+import java.util.List;
 
 import org.drools.guvnor.client.admin.ArchivedAssetManager;
 import org.drools.guvnor.client.admin.BackupManager;
@@ -50,6 +51,7 @@
 import org.drools.guvnor.client.ruleeditor.RuleViewer;
 import org.drools.guvnor.client.rulelist.AssetItemGrid;
 import org.drools.guvnor.client.rulelist.AssetItemGridDataLoader;
+import org.drools.guvnor.client.rulelist.AssetTable;
 import org.drools.guvnor.client.rulelist.EditItemEvent;
 import org.drools.guvnor.client.rulelist.QueryWidget;
 
@@ -497,50 +499,36 @@
     public void openPackageViewAssets(final String packageUuid,
                                       final String packageName,
                                       String key,
-                                      final String[] formats,
+                                      final List<String> formatInList,
                                       final String itemName) {
-        if ( !explorerViewCenterPanel.showIfOpen( key ) ) {
+        if (!explorerViewCenterPanel.showIfOpen(key)) {
 
-            final AssetItemGrid grid = new AssetItemGrid( new EditItemEvent() {
-                                                              public void open(String uuid) {
-                                                                  openAsset( uuid );
-                                                              }
+            String feedUrl = GWT.getModuleBaseURL() + "feed/package?name=" + packageName + "&viewUrl=" + Util.getSelfURL() + "&status=*";
+            final AssetTable table = new AssetTable(packageUuid, formatInList, new EditItemEvent() {
+                public void open(String uuid) {
+                    openAsset(uuid);
+                }
+                public void open(MultiViewRow[] rows) {
+                    openAssetsToMultiView(rows);
+                }
+            }, feedUrl);
+            explorerViewCenterPanel.addTab(itemName + " [" + packageName + "]",
+                    table,
+                    key);
 
-                                                              public void open(MultiViewRow[] rows) {
-                                                                  openAssetsToMultiView( rows );
-                                                              }
-                                                          },
-                                                          AssetItemGrid.PACKAGEVIEW_LIST_TABLE_ID,
-                                                          new AssetItemGridDataLoader() {
-                                                              public void loadData(int startRow,
-                                                                                   int numberOfRows,
-                                                                                   GenericCallback<TableDataResult> cb) {
-                                                                  RepositoryServiceFactory.getService().listAssets( packageUuid,
-                                                                                                                    formats,
-                                                                                                                    startRow,
-                                                                                                                    numberOfRows,
-                                                                                                                    AssetItemGrid.PACKAGEVIEW_LIST_TABLE_ID,
-                                                                                                                    cb );
-                                                              }
-                                                          },
-                                                          GWT.getModuleBaseURL() + "feed/package?name=" + packageName + "&viewUrl=" + Util.getSelfURL() + "&status=*" );
-            explorerViewCenterPanel.addTab( itemName + " [" + packageName + "]",
-                                            grid,
-                                            key );
-
             final ServerPushNotification sub = new ServerPushNotification() {
                 public void messageReceived(PushResponse response) {
-                    if ( response.messageType.equals( "packageChange" ) && response.message.equals( packageName ) ) {
-                        grid.refreshGrid();
+                    if (response.messageType.equals("packageChange") && response.message.equals(packageName)) {
+                        table.refresh();
                     }
                 }
             };
-            PushClient.instance().subscribe( sub );
-            grid.addUnloadListener( new Command() {
+            PushClient.instance().subscribe(sub);
+            table.addUnloadListener(new Command() {
                 public void execute() {
-                    PushClient.instance().unsubscribe( sub );
+                    PushClient.instance().unsubscribe(sub);
                 }
-            } );
+            });
         }
     }
 

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/RepositoryServiceServlet.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -20,6 +20,9 @@
 import java.util.Map;
 
 import javax.servlet.http.HttpServletResponse;
+
+import org.drools.guvnor.client.rpc.AssetPageRequest;
+import org.drools.guvnor.client.rpc.AssetPageResponse;
 import org.drools.guvnor.client.rpc.BulkTestRunResult;
 import org.drools.guvnor.client.rpc.DetailedSerializationException;
 
@@ -188,6 +191,9 @@
     public org.drools.guvnor.client.rpc.ValidatedResponse savePackage(org.drools.guvnor.client.rpc.PackageConfigData p0) throws SerializationException {
          return getService().savePackage( p0);
     }
+    public AssetPageResponse findAssetPage(AssetPageRequest request) throws SerializationException {
+        return getService().findAssetPage(request);
+    }
     public org.drools.guvnor.client.rpc.TableDataResult listAssets(java.lang.String p0, java.lang.String[] p1, int p2, int p3, java.lang.String p4) throws SerializationException {
          return getService().listAssets( p0,  p1,  p2,  p3,  p4);
     }

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -64,6 +64,9 @@
 import org.drools.core.util.DroolsStreamUtils;
 import org.drools.guvnor.client.common.AssetFormats;
 import org.drools.guvnor.client.explorer.ExplorerNodeConfig;
+import org.drools.guvnor.client.rpc.AssetPageRequest;
+import org.drools.guvnor.client.rpc.AssetPageResponse;
+import org.drools.guvnor.client.rpc.AssetPageRow;
 import org.drools.guvnor.client.rpc.BuilderResult;
 import org.drools.guvnor.client.rpc.BuilderResultLine;
 import org.drools.guvnor.client.rpc.BulkTestRunResult;
@@ -1077,6 +1080,65 @@
 
     @WebRemote
     @Restrict("#{identity.loggedIn}")
+    public AssetPageResponse findAssetPage(AssetPageRequest request) throws SerializationException {
+        log.debug("Finding asset page of packageUuid (" + request.getPackageUuid() + ")");
+        long start = System.currentTimeMillis();
+        PackageItem packageItem = repository.loadPackageByUUID( request.getPackageUuid() );
+        AssetItemIterator it;
+        if (request.getFormatInList() != null) {
+            if (request.getFormatIsRegistered() != null) {
+                throw new IllegalArgumentException(
+                        "Combining formatInList and formatIsRegistered is not yet supported.");
+            } else {
+                it = packageItem.listAssetsByFormat( request.getFormatInList() );
+            }
+        } else {
+            if (request.getFormatIsRegistered() != null) {
+                it = packageItem.listAssetsNotOfFormat( AssetFormatHelper.listRegisteredTypes() );
+            } else {
+                it = packageItem.queryAssets("");
+            }
+        }
+
+        AssetPageResponse response = new AssetPageResponse();
+        long totalRowSize = it.getSize();
+        if (totalRowSize > Integer.MAX_VALUE) {
+            throw new IllegalStateException("The totalRowSize (" + totalRowSize + ") is too big.");
+        }
+        response.setTotalRowSize((int) totalRowSize);
+        it.skip(request.getStartRowIndex());
+        response.setStartRowIndex(request.getStartRowIndex());
+
+        int pageSize = request.getPageSize();
+        List<AssetPageRow> rowList = new ArrayList<AssetPageRow>(request.getPageSize());
+
+        while (it.hasNext() && (pageSize < 0 || rowList.size() <= pageSize)) {
+            AssetItem assetItem = (AssetItem) it.next();
+            AssetPageRow row = new AssetPageRow();
+            row.setUuid(assetItem.getUUID());
+            row.setFormat(assetItem.getFormat());
+            row.setPackageName(assetItem.getPackageName());
+            row.setName(assetItem.getName());
+            row.setDescription(assetItem.getDescription());
+            row.setStateName(assetItem.getStateDescription());
+            row.setCreator(assetItem.getCreator());
+            row.setCreatedDate(assetItem.getCreatedDate().getTime());
+            row.setLastContributor(assetItem.getLastContributor());
+            row.setLastModified(assetItem.getLastModified().getTime());
+            row.setCategorySummary(assetItem.getCategorySummary());
+            row.setExternalSource(assetItem.getExternalSource());
+            rowList.add(row);
+        }
+        response.setAssetPageRowList(rowList);
+        response.setLastPage(!it.hasNext());
+
+        long methodDuration = System.currentTimeMillis() - start;
+        log.debug("Found asset page of packageUuid (" + request.getPackageUuid() + ") in " + methodDuration + " ms.");
+        return response;
+    }
+
+    @WebRemote
+    @Restrict("#{identity.loggedIn}")
     public TableDataResult listAssets(String uuid,
                                       String formats[],
                                       int skip,

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/AssetItemIterator.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -60,7 +60,7 @@
     /**
      * @param i The number of rules to skip.
      */
-    public void skip(int i) {
+    public void skip(long i) {
         it.skip( i );
     }
 

Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2010-11-12 02:35:39 UTC (rev 35957)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/PackageItem.java	2010-11-12 13:54:37 UTC (rev 35958)
@@ -537,6 +537,10 @@
     public AssetItemIterator listArchivedAssets () {
         return queryAssets( AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG + " = 'true'" , true );
     }
+    
+    public AssetItemIterator listAssetsByFormat(List<String> formatInList) {
+        return listAssetsByFormat(formatInList.toArray(new String[formatInList.size()]));
+    }
 
     /**
      * This will load an iterator for assets of the given format type.
@@ -928,4 +932,5 @@
     private String getCurrentUserName() {
         return this.rulesRepository.getSession().getUserID();
     }
-}
\ No newline at end of file
+
+}



More information about the jboss-svn-commits mailing list