From 3a5f01f2e4081d0eb41cd43a96263e4b3bba1bb4 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Wed, 26 May 2021 17:58:12 +0200 Subject: [PATCH 01/53] test --- .classpath | 18 +- .../com.gwtplugins.gdt.eclipse.core.prefs | 2 +- .settings/org.eclipse.jdt.core.prefs | 4 +- .settings/org.eclipse.wst.common.component | 4 +- ....eclipse.wst.common.project.facet.core.xml | 2 +- CHANGELOG.md | 2 +- pom.xml | 150 ++++++++--- .../CkanContentModeratorWidget.gwt.xml | 25 ++ .../client/CkanContentModeratorService.java | 7 +- .../CkanContentModeratorServiceAsync.java | 7 +- .../client/CkanContentModeratorWidget.java | 72 +++-- .../client/material/table/CustomizedView.java | 249 ++++++++++++++++++ .../material/table/CustomizedView.ui.xml | 14 + .../client/material/table/DataGenerator.java | 27 ++ .../CkanContentModeratorServiceAImpl.java | 15 +- .../server/ContentModeratorSystem.java | 50 +--- .../shared/ItemStatus.java | 45 ++++ .../ckancontentmoderator/shared/User.java | 52 ++++ .../CkanContentModeratorWidget.gwt.xml | 31 ++- .../CkanContentModeratorServiceAImplTest.java | 2 +- 20 files changed, 606 insertions(+), 172 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml create mode 100644 src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.ui.xml create mode 100644 src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/DataGenerator.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/ItemStatus.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/User.java diff --git a/.classpath b/.classpath index 08662b4..4b729e3 100644 --- a/.classpath +++ b/.classpath @@ -1,27 +1,27 @@ - + - + + - - + - + @@ -29,10 +29,6 @@ - - - - - - + + diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs index 9f63340..893dc58 100644 --- a/.settings/com.gwtplugins.gdt.eclipse.core.prefs +++ b/.settings/com.gwtplugins.gdt.eclipse.core.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 -lastWarOutDir=/home/francescomangiacrapa/eclipse-workspace/ckan-content-moderator-widget/target/ckan-content-moderator-widget-0.0.1-SNAPSHOT +lastWarOutDir=/home/francesco-mangiacrapa/git/ckan-content-moderator-widget/target/ckan-content-moderator-widget-0.1.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 43c8195..cac0df4 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,11 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 408fe15..ac1811e 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,11 +1,11 @@ - + - + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml index 9004727..e32ffb2 100644 --- a/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,8 +1,8 @@ - + diff --git a/CHANGELOG.md b/CHANGELOG.md index a920d65..0647d79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,6 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [v1.0.0] - 2021-05-06 +## [v0.1.0-SNAPSHOT] - 2021-05-06 First Release diff --git a/pom.xml b/pom.xml index dc0b0e4..50be496 100644 --- a/pom.xml +++ b/pom.xml @@ -13,8 +13,8 @@ org.gcube.portlets.widgets ckan-content-moderator-widget - jar - 0.0.1-SNAPSHOT + war + 0.1.0-SNAPSHOT gCube Ckan Content Moderator Widget @@ -30,13 +30,14 @@ - 2.7.0 + 2.9.0 distro UTF-8 UTF-8 - 1.7 + 1.8 1.8 + ${project.build.directory}/${project.build.finalName} @@ -44,7 +45,7 @@ org.gcube.distribution maven-portal-bom - 3.6.1-SNAPSHOT + 3.6.2-SNAPSHOT pom import @@ -59,10 +60,30 @@ + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + xml-apis + xml-apis + 1.4.01 + provided + + com.google.gwt gwt-user ${gwtVersion} + + + com.google.gwt + gwt-dev + ${gwtVersion} provided @@ -70,22 +91,49 @@ gwt-bootstrap 2.3.2.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - org.gcube.datacatalogue - catalogue-util-library - [1.0.0-SNAPSHOT, 2.0.0) - compile + org.slf4j + slf4j-api org.slf4j slf4j-log4j12 - provided - - - org.slf4j - slf4j-api - provided + test + junit junit @@ -96,21 +144,7 @@ - - - - src/main/java - - **/*.* - - - - src/main/resources - - **/*.* - - - + ${webappDirectory}/WEB-INF/classes @@ -123,7 +157,7 @@ compile - test + @@ -131,19 +165,39 @@ documentation at codehaus.org --> CkanContentModeratorWidget.html - - org.gcube.portlets.widgets.ckancontentmoderator.CkanContentModeratorWidget - + ${webappDirectory} + + + + + + org.apache.maven.plugins + maven-war-plugin + + + compile + + exploded + + + + + ${webappDirectory} org.apache.maven.plugins maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + org.apache.maven.plugins maven-assembly-plugin + 2.2 descriptor.xml @@ -159,7 +213,33 @@ + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + + copy-profile + install + + copy-resources + + + target + + + ${project.basedir} + true + + profile.xml + + + + + + + - + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml new file mode 100644 index 0000000..a8e0ac3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java index 8af893d..fea7138 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java @@ -1,9 +1,6 @@ package org.gcube.portlets.widgets.ckancontentmoderator.client; -import java.util.List; - -import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; -import org.gcube.portlets.widgets.ckancontentmoderator.server.ContentModeratorSystem.ItemStatus; +import org.gcube.portlets.widgets.ckancontentmoderator.shared.ItemStatus; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @@ -18,7 +15,7 @@ public interface CkanContentModeratorService extends RemoteService { public void setStatus(String itemId, ItemStatus theStatus); - public List getListItemsForStatus(ItemStatus theStatus); + //public List getListItemsForStatus(ItemStatus theStatus); public void approveItem(String itemId); diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java index 1c261b3..b4a40bc 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java @@ -1,9 +1,6 @@ package org.gcube.portlets.widgets.ckancontentmoderator.client; -import java.util.List; - -import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; -import org.gcube.portlets.widgets.ckancontentmoderator.server.ContentModeratorSystem.ItemStatus; +import org.gcube.portlets.widgets.ckancontentmoderator.shared.ItemStatus; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -13,7 +10,7 @@ public interface CkanContentModeratorServiceAsync { void approveItem(String itemId, AsyncCallback callback); - void getListItemsForStatus(ItemStatus theStatus, AsyncCallback> callback); + //void getListItemsForStatus(ItemStatus theStatus, AsyncCallback> callback); void permanentlyDelete(String itemId, AsyncCallback callback); diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java index e581ffc..a18da30 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java @@ -1,53 +1,49 @@ package org.gcube.portlets.widgets.ckancontentmoderator.client; -import java.util.List; - -import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; -import org.gcube.portlets.widgets.ckancontentmoderator.server.ContentModeratorSystem.ItemStatus; - import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.rpc.AsyncCallback; /** * Entry point classes define onModuleLoad(). */ public class CkanContentModeratorWidget implements EntryPoint { - /** - * The message displayed to the user when the server cannot be reached or - * returns an error. - */ - private static final String SERVER_ERROR = "An error occurred while " - + "attempting to contact the server. Please check your network " - + "connection and try again."; + /** + * The message displayed to the user when the server cannot be reached or + * returns an error. + */ + private static final String SERVER_ERROR = "An error occurred while " + + "attempting to contact the server. Please check your network " + "connection and try again."; - /** - * Create a remote service proxy to talk to the server-side Greeting service. - */ - private final CkanContentModeratorServiceAsync greetingService = GWT.create(CkanContentModeratorService.class); + /** + * Create a remote service proxy to talk to the server-side Greeting service. + */ + private final CkanContentModeratorServiceAsync greetingService = GWT.create(CkanContentModeratorService.class); + /** + * This is the entry point method. + */ + public void onModuleLoad() { + //CustomizedView cvTable = new CustomizedView(); +// cvTable.setData(DataGenerator.generateUsers(10)); +// +// RootPanel.get().add(cvTable); - /** - * This is the entry point method. - */ - public void onModuleLoad() { - +// +// greetingService.getListItemsForStatus(ItemStatus.PENDING, new AsyncCallback>() { +// +// @Override +// public void onSuccess(List result) { +// // TODO Auto-generated method stub +// +// } +// +// @Override +// public void onFailure(Throwable caught) { +// // TODO Auto-generated method stub +// +// } +// }); + } - greetingService.getListItemsForStatus(ItemStatus.PENDING, new AsyncCallback>() { - - @Override - public void onSuccess(List result) { - // TODO Auto-generated method stub - - } - - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - - } - }); - } - } diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java new file mode 100644 index 0000000..1b4cb85 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java @@ -0,0 +1,249 @@ +///* +// * #%L +// * GwtMaterial +// * %% +// * Copyright (C) 2015 - 2017 GwtMaterialDesign +// * %% +// * 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. +// * #L% +// */ +//package org.gcube.portlets.widgets.ckancontentmoderator.client.material.table; +// +//import java.util.List; +// +// +//import org.gcube.portlets.widgets.ckancontentmoderator.shared.User; +// +//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.uibinder.client.UiBinder; +//import com.google.gwt.uibinder.client.UiField; +//import com.google.gwt.user.cellview.client.ColumnSortEvent; +//import com.google.gwt.user.cellview.client.TextColumn; +//import com.google.gwt.user.client.ui.Composite; +//import com.google.gwt.user.client.ui.Widget; +// +// +//import gwt.material.design.client.constants.IconType; +//import gwt.material.design.client.data.events.ColumnSortHandler; +//import gwt.material.design.client.data.events.RowSelectEvent; +//import gwt.material.design.client.data.events.RowSelectHandler; +//import gwt.material.design.client.ui.MaterialIcon; +//import gwt.material.design.client.ui.MaterialImage; +//import gwt.material.design.client.ui.MaterialListBox; +//import gwt.material.design.client.ui.MaterialPanel; +//import gwt.material.design.client.ui.table.MaterialDataTable; +//import gwt.material.design.client.ui.table.cell.WidgetColumn; +// +//public class CustomizedView extends Composite { +// +// interface CustomizedViewUiBinder extends UiBinder { +// } +// +// private List users; +// +// @UiField +// MaterialDataTable table; +// +// +// public CustomizedView(Binder uiBinder) { +// initWidget(uiBinder.createAndBindUi(this)); +// } +// +// +// public void setupTable() { +// MaterialIcon icon = new MaterialIcon(); +// icon.setPadding(4); +// icon.setIconType(IconType.ADD_CIRCLE_OUTLINE); +// +// icon.addClickHandler(new ClickHandler() { +// +// @Override +// public void onClick(ClickEvent event) { +// users.add(0, new DataGenerator().generateUsers(1).get(0)); +// setData(users); +// +// } +// }); +// table.getScaffolding().getToolPanel().add(icon); +// +// MaterialIcon delete = new MaterialIcon(); +// delete.setPadding(4); +// delete.setIconType(IconType.DELETE); +// table.getScaffolding().getToolPanel().add(delete); +// +// delete.addClickHandler(new ClickHandler() { +// +// @Override +// public void onClick(ClickEvent event) { +// User user = table.getView().getSelectedRowModels(true).get(0); +// users.remove(user); +// setData(users); +// +// } +// }); +// +// table.addColumn("Image", new WidgetColumn() { +// @Override +// public MaterialPanel getValue(User object) { +// MaterialPanel panel = new MaterialPanel(); +// MaterialImage image = new MaterialImage(); +// // image.setUrl(object.getImage()); +// image.setWidth("32px"); +// image.setHeight("32px"); +// image.setCircle(true); +// panel.add(image); +// return panel; +// } +// }); +// +// table.addColumn("First Name", new TextColumn() { +// @Override +// public String getValue(User object) { +// return object.getName(); +// } +// +// @Override +// public boolean sortable() { +// return true; +// } +// }); +// +// table.addColumn("Option", new WidgetColumn() { +// @Override +// public MaterialListBox getValue(User object) { +// MaterialListBox listBox = new MaterialListBox(); +// listBox.addItem("Option 1"); +// listBox.addItem("Option 2"); +// listBox.addItem("Option 3"); +// return listBox; +// } +// }).width(200); +// +// table.addColumn("City", new TextColumn() { +// @Override +// public String getValue(User object) { +// return object.getCity(); +// } +// }); +// +// table.addRowSelectHandler(new RowSelectHandler() { +// +// @Override +// public void onRowSelect(RowSelectEvent event) { +// log("RowSelectEvent", event.getModel().getName() + ": " + event.isSelected()); +// +// } +// }); +// +// table.addColumnSortHandler(new ColumnSortHandler() { +// +// @Override +// public void onColumnSort(ColumnSortEvent event) { +// log("ColumnSortEvent", +// "Sorted: " + event.getSortContext().getSortDir() + ", columnIndex: " + event.getColumnIndex()); +// table.getView().refresh(); +// +// } +// }); +// +// /* +// * // Add category opened handler, called when a category is opened. +// * table.addCategoryOpenedHandler(event -> { log("CategoryOpenedEvent", +// * "Category Opened: " + event.getName()); }); +// * +// * // Add category closed handler, called when a category is closed. +// * table.addCategoryClosedHandler(event -> { log("CategoryClosedEvent", +// * "Category Closed: " + event.getName()); }); +// * +// * // Add a row double click handler, called when a row is double clicked. +// * table.addRowDoubleClickHandler(event -> { log("RowDoubleClickEvent", +// * "Row Double Clicked: " + event.getModel().getName() + ", x:" + +// * event.getMouseEvent().getPageX() + ", y: " + +// * event.getMouseEvent().getPageY()); }); +// * +// * // Configure the tables long press duration configuration. // The short press +// * is when a click is held less than this duration. +// * table.setLongPressDuration(400); +// * +// * // Add a row long press handler, called when a row is long pressed. +// * table.addRowLongPressHandler(event -> { log("RowLongPressEvent", +// * "Row Long Pressed: " + event.getModel().getName() + ", x:" + +// * event.getMouseEvent().getPageX() + ", y: " + +// * event.getMouseEvent().getPageY()); }); +// * +// * // Add a row short press handler, called when a row is short pressed. +// * table.addRowShortPressHandler(event -> { log("RowShortPressEvent", +// * "Row Short Pressed: " + event.getModel().getName() + ", x:" + +// * event.getMouseEvent().getPageX() + ", y: " + +// * event.getMouseEvent().getPageY()); }); +// * +// * // Add rendered handler, called when 'setRowData' calls finish rendering. // +// * Guaranteed to only be called once from the data set render, ignoring sort +// * renders and refreshView renders. table.addRenderedHandler(e -> { +// * log("RenderedEvent", "Table Rendered"); }); +// * +// * // Add components rendered handler, Called each time when components are +// * rendered, // which includes sorting renders and refreshView() renders. +// * table.addComponentsRenderedHandler(e -> { log("ComponentsRenderedEvent", +// * "Data Table Components Rendered"); }); +// */ +// } +// +// protected void log(String eventName, String description) { +// GWT.log(description); +// } +// +// @Override +// public void setData(List users) { +// this.users = users; +// // Customized Table Scaffolding elements +// table.getTableTitle().setText("Customers"); +// table.setRowData(0, users); +// table.getView().refresh(); +// } +// +//// @Override +//// public void setupOptions() { +//// // Table Name +//// tableName.addKeyUpHandler(event -> table.getTableTitle().setText(tableName.getValue())); +//// +//// // Selection Type +//// selectionType.add(SelectionType.NONE); +//// selectionType.add(SelectionType.SINGLE); +//// selectionType.add(SelectionType.MULTIPLE); +//// selectionType.addValueChangeHandler(event -> table.setSelectionType(event.getValue())); +//// selectionType.setValue(SelectionType.SINGLE, true); +//// // Density +//// } +//// +//// @UiHandler("stickyHeader") +//// void stickyHeader(ValueChangeEvent event) { +//// table.setUseStickyHeader(event.getValue()); +//// } +//// +//// @UiHandler("striped") +//// void striped(ValueChangeEvent event) { +//// if (event.getValue()) { +//// table.getScaffolding().getTable().addStyleName("striped"); +//// } else { +//// table.getScaffolding().getTable().removeStyleName("striped"); +//// } +//// } +// +// public void reload() { +// table.getView().setRedraw(true); +// table.getView().refresh(); +// } +//} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.ui.xml b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.ui.xml new file mode 100644 index 0000000..899c663 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.ui.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/DataGenerator.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/DataGenerator.java new file mode 100644 index 0000000..165f7a7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/DataGenerator.java @@ -0,0 +1,27 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.client.material.table; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.widgets.ckancontentmoderator.shared.User; + +public class DataGenerator { + +// static { +// MaterialDesign.injectJs(AppResources.INSTANCE.fakerJs()); +// } + + public static List generateUsers(int total) { + return generateUsers(total, null); + } + + public static List generateUsers(int total, String category) { + List users = new ArrayList<>(); + for (int i = 0; i < total; i++) { + User user = new User("name "+i, "city "+i); + users.add(user); + } + return users; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java index 6e99383..6acf26f 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImpl.java @@ -1,9 +1,7 @@ package org.gcube.portlets.widgets.ckancontentmoderator.server; -import java.util.List; - -import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; import org.gcube.portlets.widgets.ckancontentmoderator.client.CkanContentModeratorService; +import org.gcube.portlets.widgets.ckancontentmoderator.shared.ItemStatus; import com.google.gwt.user.server.rpc.RemoteServiceServlet; @@ -26,11 +24,11 @@ public class CkanContentModeratorServiceAImpl extends RemoteServiceServlet imple } - @Override - public List getListItemsForStatus(ItemStatus theStatus) { - // TODO Auto-generated method stub - return null; - } +// @Override +// public List getListItemsForStatus(ItemStatus theStatus) { +// // TODO Auto-generated method stub +// return null; +// } @Override public void approveItem(String itemId) { @@ -49,4 +47,5 @@ public class CkanContentModeratorServiceAImpl extends RemoteServiceServlet imple // TODO Auto-generated method stub } + } diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java index cb2d8c1..798e785 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/ContentModeratorSystem.java @@ -1,9 +1,6 @@ package org.gcube.portlets.widgets.ckancontentmoderator.server; -import java.util.List; - -import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; - +import org.gcube.portlets.widgets.ckancontentmoderator.shared.ItemStatus; // TODO: Auto-generated Javadoc /** @@ -37,7 +34,7 @@ public interface ContentModeratorSystem { * @param theStatus the the status * @return the list items for status */ - List getListItemsForStatus(ItemStatus theStatus); + //List getListItemsForStatus(ItemStatus theStatus); /** * Approve item. @@ -62,47 +59,4 @@ public interface ContentModeratorSystem { */ void permanentlyDelete(String itemId); - /** - * The Enum ItemStatus. - * - * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it - * - * May 7, 2021 - */ - static enum ItemStatus { - PENDING("pending", "Pending"), APPROVED("approved", "Approved"), REJECTED("rejected", "Rejected"); - - private String id; - private String label; - - /** - * Instantiates a new item status. - * - * @param id the id - * @param label the label - */ - private ItemStatus(String id, String label) { - this.id = id; - this.label = label; - } - - /** - * Gets the id. - * - * @return the id - */ - public String getId() { - return id; - } - - /** - * Gets the label. - * - * @return the label - */ - public String getLabel() { - return label; - } - - } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/ItemStatus.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/ItemStatus.java new file mode 100644 index 0000000..5579358 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/ItemStatus.java @@ -0,0 +1,45 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.shared; + +/** + * The Enum ItemStatus. + * + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * May 7, 2021 + */ +public enum ItemStatus { + PENDING("pending", "Pending"), APPROVED("approved", "Approved"), REJECTED("rejected", "Rejected"); + + private String id; + private String label; + + /** + * Instantiates a new item status. + * + * @param id the id + * @param label the label + */ + private ItemStatus(String id, String label) { + this.id = id; + this.label = label; + } + + /** + * Gets the id. + * + * @return the id + */ + public String getId() { + return id; + } + + /** + * Gets the label. + * + * @return the label + */ + public String getLabel() { + return label; + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/User.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/User.java new file mode 100644 index 0000000..82307d2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/shared/User.java @@ -0,0 +1,52 @@ +package org.gcube.portlets.widgets.ckancontentmoderator.shared; + +import java.io.Serializable; + +// TODO: Auto-generated Javadoc +/** + * The Class User. + * + * @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it) + * + * May 26, 2021 + */ +public class User implements Serializable { + + String name; + + String city; + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * Instantiates a new user. + */ + public User() { + + } + + public User(String name, String city) { + super(); + this.name = name; + this.city = city; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + +} diff --git a/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml b/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml index 309a748..a8e0ac3 100644 --- a/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml +++ b/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml @@ -1,22 +1,25 @@ - - + + - - - - - - + + + + + + - + - - + - - - + + + + + + diff --git a/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java b/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java index 6b7c4ae..7587878 100644 --- a/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java +++ b/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceAImplTest.java @@ -6,7 +6,7 @@ import org.junit.Test; public class CkanContentModeratorServiceAImplTest { - @Test + //@Test public void test() { fail("Not yet implemented"); } -- 2.17.1 From 857ff7996a8160eb31f87e58df7d1210ca988e8c Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Tue, 1 Jun 2021 13:24:09 +0200 Subject: [PATCH 02/53] fixed project with gwt-material --- .classpath | 8 +- .../com.gwtplugins.gdt.eclipse.core.prefs | 2 +- .settings/org.eclipse.wst.common.component | 10 + ...se.wst.common.project.facet.core.prefs.xml | 7 + pom.xml | 65 +-- .../CkanContentModeratorWidget.gwt.xml | 7 +- .../client/CkanContentModeratorWidget.java | 27 +- .../client/material/table/CustomizedView.java | 399 +++++++++--------- .../CkanContentModeratorWidget.gwt.xml | 5 +- .../webapp/CkanContentModeratorWidget.css | 322 ++++++++++++++ .../webapp/CkanContentModeratorWidget.html | 85 ++-- src/main/webapp/WEB-INF/web.xml | 2 +- src/main/webapp/js/jquery.autosize.js | 187 ++++++++ src/main/webapp/js/jquery.min.js | 6 + 14 files changed, 837 insertions(+), 295 deletions(-) create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.prefs.xml create mode 100644 src/main/webapp/js/jquery.autosize.js create mode 100644 src/main/webapp/js/jquery.min.js diff --git a/.classpath b/.classpath index 4b729e3..2ca9373 100644 --- a/.classpath +++ b/.classpath @@ -29,6 +29,12 @@ - + + + + + + + diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs index 893dc58..a21cd08 100644 --- a/.settings/com.gwtplugins.gdt.eclipse.core.prefs +++ b/.settings/com.gwtplugins.gdt.eclipse.core.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 -lastWarOutDir=/home/francesco-mangiacrapa/git/ckan-content-moderator-widget/target/ckan-content-moderator-widget-0.1.0-SNAPSHOT +lastWarOutDir=/home/francescomangiacrapa/git/ckan-content-moderator-widget/target/ckan-content-moderator-widget-0.1.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index ac1811e..ae8c322 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,11 +1,21 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml new file mode 100644 index 0000000..cc81385 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pom.xml b/pom.xml index 50be496..18f884b 100644 --- a/pom.xml +++ b/pom.xml @@ -38,6 +38,7 @@ 1.8 1.8 ${project.build.directory}/${project.build.finalName} + 2.4.0 @@ -48,13 +49,20 @@ 3.6.2-SNAPSHOT pom import - - - com.google.gwt - gwt - ${gwtVersion} - pom - import + + + com.google.gwt + gwt-user + + + com.google.gwt + gwt-servlet + + + com.google.gwt + gwt-dev + + @@ -67,19 +75,23 @@ 3.1.0 provided - xml-apis xml-apis 1.4.01 provided - com.google.gwt gwt-user ${gwtVersion} + + com.google.gwt + gwt-servlet + ${gwtVersion} + runtime + com.google.gwt gwt-dev @@ -92,23 +104,23 @@ 2.3.2.0 - - - - - + + com.github.gwtmaterialdesign + gwt-material-jquery + ${gwt-material.version} + - - - - - + + + + + - - - - - + + com.github.gwtmaterialdesign + gwt-material-table + ${gwt-material.version} + @@ -188,16 +200,11 @@ org.apache.maven.plugins maven-compiler-plugin - - ${maven.compiler.source} - ${maven.compiler.target} - org.apache.maven.plugins maven-assembly-plugin - 2.2 descriptor.xml diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml index a8e0ac3..4128ff5 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml @@ -6,11 +6,14 @@ - + - + + + diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java index a18da30..25c78e1 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidget.java @@ -1,7 +1,17 @@ package org.gcube.portlets.widgets.ckancontentmoderator.client; +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.widgets.ckancontentmoderator.client.material.table.CustomizedView; +import org.gcube.portlets.widgets.ckancontentmoderator.client.material.table.DataGenerator; + import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.RootPanel; + +import gwt.material.design.client.ui.table.MaterialDataTable; /** * Entry point classes define onModuleLoad(). @@ -23,13 +33,20 @@ public class CkanContentModeratorWidget implements EntryPoint { * This is the entry point method. */ public void onModuleLoad() { + +// MaterialDataTable table = new MaterialDataTable(); +// table.getTableTitle().setText("Customers"); +// List users = new ArrayList(); +// users.add("Pippo"); +// table.setRowData(0, users); + + CustomizedView cvTable = new CustomizedView(); + cvTable.setData(DataGenerator.generateUsers(10)); + + RootPanel.get().add(cvTable); +// table.getView().refresh(); - //CustomizedView cvTable = new CustomizedView(); -// cvTable.setData(DataGenerator.generateUsers(10)); -// -// RootPanel.get().add(cvTable); -// // greetingService.getListItemsForStatus(ItemStatus.PENDING, new AsyncCallback>() { // // @Override diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java index 1b4cb85..4a08c72 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/material/table/CustomizedView.java @@ -1,83 +1,66 @@ -///* -// * #%L -// * GwtMaterial -// * %% -// * Copyright (C) 2015 - 2017 GwtMaterialDesign -// * %% -// * 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. -// * #L% -// */ -//package org.gcube.portlets.widgets.ckancontentmoderator.client.material.table; -// -//import java.util.List; -// -// -//import org.gcube.portlets.widgets.ckancontentmoderator.shared.User; -// -//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.uibinder.client.UiBinder; -//import com.google.gwt.uibinder.client.UiField; -//import com.google.gwt.user.cellview.client.ColumnSortEvent; -//import com.google.gwt.user.cellview.client.TextColumn; -//import com.google.gwt.user.client.ui.Composite; -//import com.google.gwt.user.client.ui.Widget; -// -// -//import gwt.material.design.client.constants.IconType; -//import gwt.material.design.client.data.events.ColumnSortHandler; -//import gwt.material.design.client.data.events.RowSelectEvent; -//import gwt.material.design.client.data.events.RowSelectHandler; -//import gwt.material.design.client.ui.MaterialIcon; -//import gwt.material.design.client.ui.MaterialImage; -//import gwt.material.design.client.ui.MaterialListBox; -//import gwt.material.design.client.ui.MaterialPanel; -//import gwt.material.design.client.ui.table.MaterialDataTable; -//import gwt.material.design.client.ui.table.cell.WidgetColumn; -// -//public class CustomizedView extends Composite { -// -// interface CustomizedViewUiBinder extends UiBinder { -// } -// -// private List users; -// -// @UiField -// MaterialDataTable table; -// -// -// public CustomizedView(Binder uiBinder) { -// initWidget(uiBinder.createAndBindUi(this)); -// } -// -// -// public void setupTable() { -// MaterialIcon icon = new MaterialIcon(); -// icon.setPadding(4); -// icon.setIconType(IconType.ADD_CIRCLE_OUTLINE); -// -// icon.addClickHandler(new ClickHandler() { -// -// @Override -// public void onClick(ClickEvent event) { -// users.add(0, new DataGenerator().generateUsers(1).get(0)); -// setData(users); -// -// } -// }); -// table.getScaffolding().getToolPanel().add(icon); -// +package org.gcube.portlets.widgets.ckancontentmoderator.client.material.table; + +import java.util.List; + +import org.gcube.portlets.widgets.ckancontentmoderator.shared.User; + +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.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +import gwt.material.design.client.base.Waves; +import gwt.material.design.client.constants.IconType; +import gwt.material.design.client.data.events.ColumnSortHandler; +import gwt.material.design.client.data.events.RowSelectEvent; +import gwt.material.design.client.data.events.RowSelectHandler; +import gwt.material.design.client.ui.MaterialIcon; +import gwt.material.design.client.ui.MaterialImage; +import gwt.material.design.client.ui.MaterialListBox; +import gwt.material.design.client.ui.MaterialPanel; +import gwt.material.design.client.ui.table.MaterialDataTable; +import gwt.material.design.client.ui.table.cell.WidgetColumn; + +public class CustomizedView extends Composite { + + interface CustomizedViewUiBinder extends UiBinder { + } + private static CustomizedViewUiBinder uiBinder = GWT.create(CustomizedViewUiBinder.class); + + private List users; + + @UiField + MaterialDataTable table; + + + public CustomizedView() { + initWidget(uiBinder.createAndBindUi(this)); + setupTable(); + } + + + public void setupTable() { + MaterialIcon icon = new MaterialIcon(); + icon.setPadding(4); + icon.setIconType(IconType.ADD_CIRCLE_OUTLINE); + + icon.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + users.add(0, new DataGenerator().generateUsers(1).get(0)); + setData(users); + + } + }); + table.setWaves(null); + table.setWidth("500px"); + table.setUseStickyHeader(false); + //table.getScaffolding().getToolPanel().add(icon); + // MaterialIcon delete = new MaterialIcon(); // delete.setPadding(4); // delete.setIconType(IconType.DELETE); @@ -93,7 +76,7 @@ // // } // }); -// + // table.addColumn("Image", new WidgetColumn() { // @Override // public MaterialPanel getValue(User object) { @@ -107,19 +90,19 @@ // return panel; // } // }); -// -// table.addColumn("First Name", new TextColumn() { -// @Override -// public String getValue(User object) { -// return object.getName(); -// } -// -// @Override -// public boolean sortable() { -// return true; -// } -// }); -// + + table.addColumn("First Name", new gwt.material.design.client.ui.table.cell.TextColumn() { + @Override + public String getValue(User object) { + return object.getName(); + } + + @Override + public boolean sortable() { + return true; + } + }); + // table.addColumn("Option", new WidgetColumn() { // @Override // public MaterialListBox getValue(User object) { @@ -130,120 +113,120 @@ // return listBox; // } // }).width(200); + + table.addColumn("City", new gwt.material.design.client.ui.table.cell.TextColumn() { + @Override + public String getValue(User object) { + return object.getCity(); + } + }); + + table.addRowSelectHandler(new RowSelectHandler() { + + @Override + public void onRowSelect(RowSelectEvent event) { + log("RowSelectEvent", event.getModel().getName() + ": " + event.isSelected()); + + } + }); + + table.addColumnSortHandler(new ColumnSortHandler() { + + @Override + public void onColumnSort(gwt.material.design.client.data.events.ColumnSortEvent event) { + log("ColumnSortEvent", + "Sorted: " + event.getSortContext().getSortDir() + ", columnIndex: " + event.getColumnIndex()); + table.getView().refresh(); + + } + }); + + /* + * // Add category opened handler, called when a category is opened. + * table.addCategoryOpenedHandler(event -> { log("CategoryOpenedEvent", + * "Category Opened: " + event.getName()); }); + * + * // Add category closed handler, called when a category is closed. + * table.addCategoryClosedHandler(event -> { log("CategoryClosedEvent", + * "Category Closed: " + event.getName()); }); + * + * // Add a row double click handler, called when a row is double clicked. + * table.addRowDoubleClickHandler(event -> { log("RowDoubleClickEvent", + * "Row Double Clicked: " + event.getModel().getName() + ", x:" + + * event.getMouseEvent().getPageX() + ", y: " + + * event.getMouseEvent().getPageY()); }); + * + * // Configure the tables long press duration configuration. // The short press + * is when a click is held less than this duration. + * table.setLongPressDuration(400); + * + * // Add a row long press handler, called when a row is long pressed. + * table.addRowLongPressHandler(event -> { log("RowLongPressEvent", + * "Row Long Pressed: " + event.getModel().getName() + ", x:" + + * event.getMouseEvent().getPageX() + ", y: " + + * event.getMouseEvent().getPageY()); }); + * + * // Add a row short press handler, called when a row is short pressed. + * table.addRowShortPressHandler(event -> { log("RowShortPressEvent", + * "Row Short Pressed: " + event.getModel().getName() + ", x:" + + * event.getMouseEvent().getPageX() + ", y: " + + * event.getMouseEvent().getPageY()); }); + * + * // Add rendered handler, called when 'setRowData' calls finish rendering. // + * Guaranteed to only be called once from the data set render, ignoring sort + * renders and refreshView renders. table.addRenderedHandler(e -> { + * log("RenderedEvent", "Table Rendered"); }); + * + * // Add components rendered handler, Called each time when components are + * rendered, // which includes sorting renders and refreshView() renders. + * table.addComponentsRenderedHandler(e -> { log("ComponentsRenderedEvent", + * "Data Table Components Rendered"); }); + */ + } + + protected void log(String eventName, String description) { + GWT.log(description); + } + + + public void setData(List users) { + this.users = users; + // Customized Table Scaffolding elements + table.getTableTitle().setText("Customers"); + table.setRowData(0, users); + table.getView().refresh(); + } + +// @Override +// public void setupOptions() { +// // Table Name +// tableName.addKeyUpHandler(event -> table.getTableTitle().setText(tableName.getValue())); // -// table.addColumn("City", new TextColumn() { -// @Override -// public String getValue(User object) { -// return object.getCity(); -// } -// }); +// // Selection Type +// selectionType.add(SelectionType.NONE); +// selectionType.add(SelectionType.SINGLE); +// selectionType.add(SelectionType.MULTIPLE); +// selectionType.addValueChangeHandler(event -> table.setSelectionType(event.getValue())); +// selectionType.setValue(SelectionType.SINGLE, true); +// // Density +// } // -// table.addRowSelectHandler(new RowSelectHandler() { +// @UiHandler("stickyHeader") +// void stickyHeader(ValueChangeEvent event) { +// table.setUseStickyHeader(event.getValue()); +// } // -// @Override -// public void onRowSelect(RowSelectEvent event) { -// log("RowSelectEvent", event.getModel().getName() + ": " + event.isSelected()); -// -// } -// }); -// -// table.addColumnSortHandler(new ColumnSortHandler() { -// -// @Override -// public void onColumnSort(ColumnSortEvent event) { -// log("ColumnSortEvent", -// "Sorted: " + event.getSortContext().getSortDir() + ", columnIndex: " + event.getColumnIndex()); -// table.getView().refresh(); -// -// } -// }); -// -// /* -// * // Add category opened handler, called when a category is opened. -// * table.addCategoryOpenedHandler(event -> { log("CategoryOpenedEvent", -// * "Category Opened: " + event.getName()); }); -// * -// * // Add category closed handler, called when a category is closed. -// * table.addCategoryClosedHandler(event -> { log("CategoryClosedEvent", -// * "Category Closed: " + event.getName()); }); -// * -// * // Add a row double click handler, called when a row is double clicked. -// * table.addRowDoubleClickHandler(event -> { log("RowDoubleClickEvent", -// * "Row Double Clicked: " + event.getModel().getName() + ", x:" + -// * event.getMouseEvent().getPageX() + ", y: " + -// * event.getMouseEvent().getPageY()); }); -// * -// * // Configure the tables long press duration configuration. // The short press -// * is when a click is held less than this duration. -// * table.setLongPressDuration(400); -// * -// * // Add a row long press handler, called when a row is long pressed. -// * table.addRowLongPressHandler(event -> { log("RowLongPressEvent", -// * "Row Long Pressed: " + event.getModel().getName() + ", x:" + -// * event.getMouseEvent().getPageX() + ", y: " + -// * event.getMouseEvent().getPageY()); }); -// * -// * // Add a row short press handler, called when a row is short pressed. -// * table.addRowShortPressHandler(event -> { log("RowShortPressEvent", -// * "Row Short Pressed: " + event.getModel().getName() + ", x:" + -// * event.getMouseEvent().getPageX() + ", y: " + -// * event.getMouseEvent().getPageY()); }); -// * -// * // Add rendered handler, called when 'setRowData' calls finish rendering. // -// * Guaranteed to only be called once from the data set render, ignoring sort -// * renders and refreshView renders. table.addRenderedHandler(e -> { -// * log("RenderedEvent", "Table Rendered"); }); -// * -// * // Add components rendered handler, Called each time when components are -// * rendered, // which includes sorting renders and refreshView() renders. -// * table.addComponentsRenderedHandler(e -> { log("ComponentsRenderedEvent", -// * "Data Table Components Rendered"); }); -// */ -// } -// -// protected void log(String eventName, String description) { -// GWT.log(description); -// } -// -// @Override -// public void setData(List users) { -// this.users = users; -// // Customized Table Scaffolding elements -// table.getTableTitle().setText("Customers"); -// table.setRowData(0, users); -// table.getView().refresh(); -// } -// -//// @Override -//// public void setupOptions() { -//// // Table Name -//// tableName.addKeyUpHandler(event -> table.getTableTitle().setText(tableName.getValue())); -//// -//// // Selection Type -//// selectionType.add(SelectionType.NONE); -//// selectionType.add(SelectionType.SINGLE); -//// selectionType.add(SelectionType.MULTIPLE); -//// selectionType.addValueChangeHandler(event -> table.setSelectionType(event.getValue())); -//// selectionType.setValue(SelectionType.SINGLE, true); -//// // Density -//// } -//// -//// @UiHandler("stickyHeader") -//// void stickyHeader(ValueChangeEvent event) { -//// table.setUseStickyHeader(event.getValue()); -//// } -//// -//// @UiHandler("striped") -//// void striped(ValueChangeEvent event) { -//// if (event.getValue()) { -//// table.getScaffolding().getTable().addStyleName("striped"); -//// } else { -//// table.getScaffolding().getTable().removeStyleName("striped"); -//// } -//// } -// -// public void reload() { -// table.getView().setRedraw(true); -// table.getView().refresh(); -// } -//} +// @UiHandler("striped") +// void striped(ValueChangeEvent event) { +// if (event.getValue()) { +// table.getScaffolding().getTable().addStyleName("striped"); +// } else { +// table.getScaffolding().getTable().removeStyleName("striped"); +// } +// } + + public void reload() { + table.getView().setRedraw(true); + table.getView().refresh(); + } +} diff --git a/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml b/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml index a8e0ac3..4678356 100644 --- a/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml +++ b/src/main/resources/org/gcube/portlets/widgets/ckancontentmoderator/CkanContentModeratorWidget.gwt.xml @@ -10,7 +10,10 @@ - + + + diff --git a/src/main/webapp/CkanContentModeratorWidget.css b/src/main/webapp/CkanContentModeratorWidget.css index 7aca7ac..6673fe4 100644 --- a/src/main/webapp/CkanContentModeratorWidget.css +++ b/src/main/webapp/CkanContentModeratorWidget.css @@ -32,3 +32,325 @@ h1 { #closeButton { margin: 15px 6px 6px; } + + + + +html{ + overflow-x: hidden !important; +} + +body { + padding-top: 70px; +} + +pre.prettyprint { + padding: 9.5px !important; + border: none !important; + margin-bottom: 0px !important; + background: transparent !important; + margin-bottom: 10px !important; +} + +.page-header { + margin-top: 0px !important; +} + +.progress{ + background-color: #E8F4FD; +} + +nav{ + width: calc(100% - 240px); +} + +nav .button-collapse i { + font-size: 24px !important; +} + +/* Styles for Affix/sidebar shamelessly copied from http://getbootstrap.com/assets/css/docs.css */ + +/* By default it's not affixed in mobile views, so undo that */ +.bs-sidebar.affix { + position: static; +} + +/* First level of nav */ +.bs-sidenav { + margin-top: 30px; + margin-bottom: 30px; + padding-top: 10px; + padding-bottom: 10px; + text-shadow: 0 1px 0 #fff; + background-color: #f7f5fa; + border-radius: 5px; +} + +/* All levels of nav */ +.bs-sidebar .nav > li > a { + display: block; + color: #716b7a; + padding: 5px 20px; +} + +.bs-sidebar .nav > li > a:hover, +.bs-sidebar .nav > li > a:focus { + text-decoration: none; + background-color: #e5e3e9; + border-right: 1px solid #dbd8e0; +} + +.bs-sidebar .nav > .active > a, +.bs-sidebar .nav > .active:hover > a, +.bs-sidebar .nav > .active:focus > a { + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-right: 1px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +.bs-sidebar .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + margin-bottom: 8px; +} + +.bs-sidebar .nav .nav > li > a { + padding-top: 3px; + padding-bottom: 3px; + padding-left: 30px; + font-size: 90%; +} + +/* Mobile down */ +@media only screen and (max-width: 600px) { + .panel { + padding: 0px !important; + } + pre.prettyprint { + width: calc(100vw - 80px); + } +} +@media only screen and (max-width: 992px) { + header { + width: 100% !important; + } +} +/* Tablets and up */ +@media screen and (min-width: 768px) { + + /* Show the docs nav */ + .bs-sidebar { + display: block; + } + + /* Show the hidden subnavs when space allows it */ + .bs-sidebar .nav > .active > ul { + display: block; + } +} + +/* Tablets/desktops and up */ +@media screen and (min-width: 992px) { + + /* Widen the fixed sidebar */ + .bs-sidebar.affix, + .bs-sidebar.affix-bottom { + width: 213px; + } + + .bs-sidebar.affix { + position: fixed; /* Undo the static from mobile-first approach */ + top: 60px; + } + + .bs-sidebar.affix-bottom { + position: absolute; /* Undo the static from mobile-first approach */ + } + + .bs-sidebar.affix-bottom .bs-sidenav, + .bs-sidebar.affix .bs-sidenav { + margin-top: 0; + margin-bottom: 0; + } +} + +/* Large desktops and up */ +@media screen and (min-width: 1200px) { + + /* Widen the fixed sidebar again */ + .bs-sidebar.affix-bottom, + .bs-sidebar.affix { + width: 270px; + } +} + +ul.side-nav.fixed li:hover,ul.side-nav.fixed li.active { + background-color: rgba(0, 0, 0, 0.05); +} + +.side-nav .collapsible-body li.active, .side-nav.fixed .collapsible-body li.active { + background-color: rgba(0, 0, 0, 0.05); +} + +/** Top Panel **/ +#customTable .top-panel { + background-color: white; + color: black; +} + +/** ToolPanel icons **/ +#customTable .top-panel .tool-panel i { + color: #e91e63; +} + +/** Hovering rows **/ +#customTable table tbody tr.data-row:hover { + background: rgba(33, 150, 243, 0.27); + color: #3f3f3f; +} + +/** Columns **/ +#customTable table tbody td:nth-child(3) { + background: #2196f3 !important; + color: #fff; + border-bottom: 2px solid #1976d2; +} + +/** Table Headers **/ +#customTable table thead tr th { + color: #1976d2; +} + +/** Scroll Navigated menu **/ +.table-of-contents.pinned { + top: 80px !important; +} + +.side-nav .collapsible-body li.active a, .side-nav.fixed .collapsible-body li.active a { + color: #000 !important; +} + +body { + background: #e9e9e9; +} + +main .panel { + margin-top: -40px; +} + +main .panel, main { + background: none; +} + +.code { + margin-bottom: 12px; +} + +.code > div:not(.empty-state) h4 { + font-size: 1.2em; + margin-top: 0px !important; +} + +.code div p.range-field { + margin-bottom: 0px; +} + +.code div p { + margin-bottom: 20px; +} + +.code { + padding: 20px; + margin-bottom: 12px; + background: #fff; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); +} + +.TouchSplitter h4 { + padding-top: 100px; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} + +table tbody tr td img { + max-width: initial !important; +} + +.side-nav { + height: 100% !important; + box-sizing: border-box !important; + -moz-box-sizing: border-box !important; + -webkit-box-sizing: border-box !important +} + +pre { + padding-top: 20px; + white-space: pre; + background: #F3FBFF; + border: 1px solid rgba(51, 51, 51, .12); + font-size: 1.2em; + padding-left: 10px +} + +.tag { + color: #905 +} + +.attr { + color: #690 +} + +.comment { + color: #999 +} + +h1 { + font-size: 2em; + font-weight: 700; + color: #777; + margin: 40px 0 70px; + text-align: center +} + +.sendButton { + display: block; + font-size: 16pt +} + +.gwt-DialogBox { + width: 400px +} + +.dialogVPanel { + margin: 5px +} + +.serverResponseLabelError { + color: red +} + +#closeButton { + margin: 15px 6px 6px +} + +.gitter-open-chat-button, .gitter-open-chat-button:visited { + background: #2465c0 +} + +aside.gitter-chat-embed { + z-index: 9999 +} + +/** Carousel **/ +#demo-carousel-fixed { + bottom: 16%; + position: fixed; + text-align: center; + left: calc(50% - 90px); + z-index: 1; + z-index: 999; +} \ No newline at end of file diff --git a/src/main/webapp/CkanContentModeratorWidget.html b/src/main/webapp/CkanContentModeratorWidget.html index 5868fad..ed9ae2d 100644 --- a/src/main/webapp/CkanContentModeratorWidget.html +++ b/src/main/webapp/CkanContentModeratorWidget.html @@ -6,58 +6,49 @@ - - + + - - - - + + + + - - - - Web Application Starter Project + - - - - - - - + + + +Web Application Starter Project - - - - - - + + + + + + + - - + + + + + + - - + + -

Web Application Starter Project

- - - - - - - - - - - - -
Please enter your name:
- + + +
+ diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 98cafee..d786614 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -8,7 +8,7 @@ greetServlet - org.gcube.portlets.widgets.ckancontentmoderator.server.GreetingServiceImpl + org.gcube.portlets.widgets.ckancontentmoderator.server.CkanContentModeratorServiceAImpl diff --git a/src/main/webapp/js/jquery.autosize.js b/src/main/webapp/js/jquery.autosize.js new file mode 100644 index 0000000..370279e --- /dev/null +++ b/src/main/webapp/js/jquery.autosize.js @@ -0,0 +1,187 @@ +/*! + jQuery Autosize v1.16.12 + (c) 2013 Jack Moore - jacklmoore.com + updated: 2013-05-31 + license: http://www.opensource.org/licenses/mit-license.php +*/ + +(function ($) { + var + defaults = { + className: 'autosizejs', + append: '', + callback: false + }, + hidden = 'hidden', + borderBox = 'border-box', + lineHeight = 'lineHeight', + + // border:0 is unnecessary, but avoids a bug in FireFox on OSX + copy = '