256: Workspace explorer

Task-Url: https://support.d4science.org/issues/256

Added code to overwrite Bootstrap css (bootstrap.min.css)
Added code to filter for Mime Type, File Extensions, Properties

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@117534 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-07-29 14:23:29 +00:00
parent cf9b4bfffc
commit e6520cdad9
16 changed files with 1350 additions and 92 deletions

25
pom.xml
View File

@ -89,19 +89,18 @@
</dependency>
<!-- HOME LIBRARY -->
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library-model</artifactId>
<version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library-jcr</artifactId>
<!-- <version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version> -->
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<scope>provided</scope>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.gcube.common</groupId> -->
<!-- <artifactId>home-library-model</artifactId> -->
<!-- <version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version> -->
<!-- <scope>provided</scope> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.gcube.common</groupId> -->
<!-- <artifactId>home-library-jcr</artifactId> -->
<!-- <version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version> -->
<!-- <scope>provided</scope> -->
<!-- </dependency> -->
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library</artifactId>

View File

@ -3,8 +3,8 @@
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />
<!-- UNCOMMNET TO USE GWT 2.7 SUPER DEV MODE-->
<set-configuration-property name='xsiframe.failIfScriptTag' value='FALSE'/>
<!-- UNCOMMNET TO USE GWT 2.7 SUPER DEV MODE -->
<set-configuration-property name='xsiframe.failIfScriptTag' value='FALSE' />
<script src="jquery-1.10.1.min.js"></script>
<script src="bootstrap.min.js"></script>
@ -22,4 +22,14 @@
<source path='client' />
<source path='shared' />
</module>
<!--Override Bootstrap Css-->
<source path='resources' />
<replace-with class="org.gcube.portlets.widgets.wsexplorer.resources.BootstrapConfigurator">
<when-type-is class="com.github.gwtbootstrap.client.ui.config.Configurator" />
</replace-with>
<public path="resources">
<exclude name="** /*.java" />
<exclude name="** /*.class" />
</public>
</module>

View File

@ -19,6 +19,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService
import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs;
import org.gcube.portlets.widgets.wsexplorer.client.view.Navigation;
import org.gcube.portlets.widgets.wsexplorer.client.view.WorkspaceExplorer;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
@ -61,10 +62,18 @@ public class WorkspaceExplorerController implements EventHandler {
workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation);
}
// public void loadRoot(){
// wsExplorer.loadRoot();
// }
/**
* Instantiates a new workspace explorer controller.
*
* @param filterCriteria the filter criteria
*/
public WorkspaceExplorerController(FilterCriteria filterCriteria) {
bindEvents();
wsExplorer = new WorkspaceExplorer(filterCriteria);
workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation);
}
/**
* Bind events.
*/
@ -172,10 +181,18 @@ public class WorkspaceExplorerController implements EventHandler {
});
}
/**
* Clear more info.
*/
private void clearMoreInfo(){
workspaceExplorerPanel.getSouthPanel().clear();
}
/**
* Update more info.
*
* @param item the item
*/
private void updateMoreInfo(Item item){
if(item!=null){
@ -247,6 +264,8 @@ public class WorkspaceExplorerController implements EventHandler {
}
/**
* Gets the breadcrumbs.
*
* @return the breadcrumbs
*/
public Breadcrumbs getBreadcrumbs() {
@ -263,6 +282,8 @@ public class WorkspaceExplorerController implements EventHandler {
}
/**
* Gets the ws explorer.
*
* @return the wsExplorer
*/
public WorkspaceExplorer getWsExplorer() {
@ -270,13 +291,17 @@ public class WorkspaceExplorerController implements EventHandler {
}
/**
* @param selectableTypes
* Sets the selectable types.
*
* @param selectableTypes the new selectable types
*/
public void setSelectableTypes(ItemType[] selectableTypes) {
wsExplorer.setSelectableTypes(selectableTypes);
}
/**
* Gets the selectable types.
*
* @return the selectableTypes
*/
public List<ItemType> getSelectableTypes() {
@ -284,14 +309,18 @@ public class WorkspaceExplorerController implements EventHandler {
}
/**
* @return
* Gets the showable types.
*
* @return the showable types
*/
public List<ItemType> getShowableTypes() {
return wsExplorer.getShowableTypes();
}
/**
* @param showableTypes
* Sets the showable types.
*
* @param showableTypes the new showable types
*/
public void setShowableTypes(ItemType[] showableTypes) {
wsExplorer.setShowableTypes(showableTypes);

View File

@ -10,6 +10,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEventHandler;
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSaveNotification.HasWorskpaceExplorerSaveNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSaveNotification.WorskpaceExplorerSaveNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
@ -42,7 +43,7 @@ public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceEx
private boolean isSave = false;
private String captionTxt;
private ModalFooter footer = new ModalFooter();
private WorkspaceExplorerController controller = new WorkspaceExplorerController();
private WorkspaceExplorerController controller;
private List<WorskpaceExplorerSaveNotificationListener> listeners = new ArrayList<WorskpaceExplorerSaveNotificationListener>();
private TextBox fileNameTextBox = new TextBox();
@ -54,10 +55,21 @@ public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceEx
* @param fileName the file name
*/
public WorkspaceExplorerSaveDialog(String captionTxt, String fileName) {
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt, fileName);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt, fileName);
}
/**
* Instantiates a new workspace explorer save dialog.
*
* @param captionTxt the caption txt
* @param fileName the file name
* @param filterCriteria the filter criteria to filter for Mime Types, File Extensions, Properties
*/
public WorkspaceExplorerSaveDialog(String captionTxt, String fileName, FilterCriteria filterCriteria) {
controller = new WorkspaceExplorerController(filterCriteria);
loadExplorer(captionTxt, fileName);
}
/**
* Instantiates a new workspace explorer save dialog.
@ -74,11 +86,9 @@ public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceEx
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt, fileName);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt, fileName);
}
/**
* Instantiates a new workspace explorer save dialog.
@ -94,8 +104,8 @@ public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceEx
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(WorkspaceExplorerConstants.WORKSPACE_EXPLORER_SAVE_AS_CAPTION, fileName);
controller = new WorkspaceExplorerController();
loadExplorer(WorkspaceExplorerConstants.WORKSPACE_EXPLORER_SAVE_AS_CAPTION, fileName);
}
@ -113,9 +123,8 @@ public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceEx
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt, fileName);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt, fileName);
}
@ -132,7 +141,18 @@ public class WorkspaceExplorerSaveDialog extends Modal implements HasWorskpaceEx
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
controller = new WorkspaceExplorerController();
loadExplorer(WorkspaceExplorerConstants.WORKSPACE_EXPLORER_SAVE_AS_CAPTION, fileName);
}
/**
* Load explorer.
*
* @param captionTxt the caption txt
* @param fileName the file name
*/
private void loadExplorer(String captionTxt, String fileName){
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt, fileName);
}

View File

@ -13,6 +13,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.event.ClickItemEventHandler;
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSaveNotification.HasWorskpaceExplorerSaveNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSaveNotification.WorskpaceExplorerSaveNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
@ -42,7 +43,7 @@ public class WorkspaceExplorerSavePanel extends ScrollPanel implements HasWorskp
private Button saveButton;
@SuppressWarnings("unused")
private boolean isSave = false;
private WorkspaceExplorerController controller = new WorkspaceExplorerController();
private WorkspaceExplorerController controller;
private List<WorskpaceExplorerSaveNotificationListener> listeners = new ArrayList<WorskpaceExplorerSaveNotificationListener>();
private TextBox fileNameTextBox = new TextBox();
private VerticalPanel mainVP = new VerticalPanel();
@ -55,10 +56,20 @@ public class WorkspaceExplorerSavePanel extends ScrollPanel implements HasWorskp
* @param fileName the file name
*/
public WorkspaceExplorerSavePanel(String fileName) {
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(fileName);
controller = new WorkspaceExplorerController();
loadExplorer(fileName);
}
/**
* Instantiates a new workspace explorer save panel.
*
* @param fileName the file name
* @param filterCriteria the filter criteria
*/
public WorkspaceExplorerSavePanel(String fileName, FilterCriteria filterCriteria) {
controller = new WorkspaceExplorerController(filterCriteria);
loadExplorer(fileName);
}
/**
* Instantiates a new workspace explorer save panel.
@ -74,9 +85,8 @@ public class WorkspaceExplorerSavePanel extends ScrollPanel implements HasWorskp
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(fileName);
controller = new WorkspaceExplorerController();
loadExplorer(fileName);
}
/**
@ -92,7 +102,16 @@ public class WorkspaceExplorerSavePanel extends ScrollPanel implements HasWorskp
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
controller = new WorkspaceExplorerController();
loadExplorer(fileName);
}
/**
* Load explorer.
*
* @param fileName the file name
*/
private void loadExplorer(String fileName){
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(fileName);
}
@ -282,6 +301,8 @@ public class WorkspaceExplorerSavePanel extends ScrollPanel implements HasWorskp
}
/**
* Gets the save button.
*
* @return the saveButton
*/
public Button getSaveButton() {

View File

@ -11,6 +11,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.HasWorskpaceExplorerSelectNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
@ -40,20 +41,32 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
private String captionTxt;
private ModalFooter footer = new ModalFooter();
private Alert alertConfirm;
private WorkspaceExplorerController controller = new WorkspaceExplorerController();
private WorkspaceExplorerController controller;
private List<WorskpaceExplorerSelectNotificationListener> listeners = new ArrayList<WorskpaceExplorerSelectNotificationListener>();
/**
* Instantiates a new workspace explorer select dialog.
*
* @param captionTxt the caption txt
* You can implement {@link WorskpaceExplorerSelectNotificationListener} to receive events
* @param captionTxt the caption txt
*
*/
public WorkspaceExplorerSelectDialog(String captionTxt) {
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt);
}
/**
* Instantiates a new workspace explorer select dialog.
* You can implement {@link WorskpaceExplorerSelectNotificationListener} to receive events
* @param captionTxt the caption txt
* @param filterCriteria the filter criteria
*/
public WorkspaceExplorerSelectDialog(String captionTxt, FilterCriteria filterCriteria) {
controller = new WorkspaceExplorerController(filterCriteria);
loadExplorer(captionTxt);
}
/**
* Instantiates a new workspace explorer select dialog.
@ -69,9 +82,9 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt);
}
/**
@ -95,7 +108,17 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt);
}
/**
* Load explorer.
*
* @param captionTxt the caption txt
*/
private void loadExplorer(String captionTxt){
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
@ -155,7 +178,8 @@ public class WorkspaceExplorerSelectDialog extends Modal implements HasWorskpace
* Sets the alert confirm.
*
* @param html the html
* @param bool the bool
* @param show the show
* @param item the item
*/
private void setAlertConfirm(String html, boolean show, final Item item){
try{

View File

@ -11,6 +11,7 @@ import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.HasWorskpaceExplorerSelectNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
@ -40,7 +41,7 @@ public class WorkspaceExplorerSelectPanel extends ScrollPanel implements HasWors
private String captionTxt;
private ModalFooter footer = new ModalFooter();
private Alert alertConfirm;
private WorkspaceExplorerController controller = new WorkspaceExplorerController();
private WorkspaceExplorerController controller;
private List<WorskpaceExplorerSelectNotificationListener> listeners = new ArrayList<WorskpaceExplorerSelectNotificationListener>();
private VerticalPanel mainVP = new VerticalPanel();
@ -50,9 +51,22 @@ public class WorkspaceExplorerSelectPanel extends ScrollPanel implements HasWors
* @param captionTxt the tool-tip of the panel
*/
public WorkspaceExplorerSelectPanel(String captionTxt) {
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(captionTxt);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt);
}
/**
* Instantiates a new workspace explorer select panel.
*
* @param captionTxt the caption txt
* @param filterCriteria the filter criteria
*/
public WorkspaceExplorerSelectPanel(String captionTxt, FilterCriteria filterCriteria) {
controller = new WorkspaceExplorerController(filterCriteria);
loadExplorer(captionTxt);
}
/**
@ -69,9 +83,8 @@ public class WorkspaceExplorerSelectPanel extends ScrollPanel implements HasWors
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(captionTxt);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt);
}
@ -94,12 +107,20 @@ public class WorkspaceExplorerSelectPanel extends ScrollPanel implements HasWors
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(captionTxt);
controller = new WorkspaceExplorerController();
loadExplorer(captionTxt);
}
/**
* Load explorer.
*
* @param captionTxt the caption txt
*/
private void loadExplorer(String captionTxt){
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initPanel(captionTxt);
}
/**

View File

@ -1,9 +1,7 @@
package org.gcube.portlets.widgets.wsexplorer.client.view;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.gcube.portlets.widgets.wsexplorer.client.Util;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
@ -48,9 +46,11 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
protected Alert alert = new Alert();
protected List<ItemType> selectableTypes = new ArrayList<ItemType>();
protected List<ItemType> showableTypes = new ArrayList<ItemType>();
protected List<String> allowedMimeTypes = new ArrayList<String>();
// protected List<String> allowedMimeTypes = new ArrayList<String>();
// protected List<String> allowedFileExtensions = new ArrayList<String>();
// protected Map<String, String> requiredProperties = new HashMap<String, String>();
protected FilterCriteria filterCriteria = null;
protected boolean showEmptyFolders = true;
protected Map<String, String> requiredProperties = new HashMap<String, String>();
protected ScrollPanel explorerPanel;
private ItemsTable itTables;
@ -68,7 +68,17 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
explorerPanel = new ScrollPanel();
}
/**
* Instantiates a new workspace explorer.
*
* @param filterCriteria the filter criteria
*/
public WorkspaceExplorer(FilterCriteria filterCriteria) {
this();
this.filterCriteria = filterCriteria;
}
/**
* Sets the alert.
*
@ -109,7 +119,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
boolean purgeEmpyFolders = !showEmptyFolders;
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties);
// FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties, allowedFileExtensions);
GWT.log("loading workspace tree from server");
@ -148,7 +158,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
}
boolean purgeEmpyFolders = !showEmptyFolders;
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties);
// FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties, allowedFileExtensions);
GWT.log("loading workspace tree from server");
WorkspaceExplorerController.workspaceNavigatorService.getFolder(item.getId(), showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() {
@ -186,7 +196,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
}
boolean purgeEmpyFolders = !showEmptyFolders;
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties);
// FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties, allowedFileExtensions);
GWT.log("loading workspace tree from server");
WorkspaceExplorerController.workspaceNavigatorService.getMySpecialFolder(showableTypesParam, purgeEmpyFolders, filterCriteria, new AsyncCallback<Item>() {

View File

@ -0,0 +1,23 @@
package org.gcube.portlets.widgets.wsexplorer.resources;
import com.github.gwtbootstrap.client.ui.config.Configurator;
import com.github.gwtbootstrap.client.ui.resources.Resources;
import com.google.gwt.core.client.GWT;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @Jul 30, 2014
*
*/
public class BootstrapConfigurator implements Configurator {
public Resources getResources() {
return GWT.create(BootstrapOverrideResources.class);
}
public boolean hasResponsiveDesign() {
return false;
}
}

View File

@ -0,0 +1,14 @@
package org.gcube.portlets.widgets.wsexplorer.resources;
/**
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @Jul 28, 2014
*
*/
import com.github.gwtbootstrap.client.ui.resources.Resources;
import com.google.gwt.resources.client.TextResource;
public interface BootstrapOverrideResources extends Resources {
@Source("css/bootstrap.min.css")
TextResource bootstrapCss();
}

View File

@ -0,0 +1,960 @@
/*MODAL FOOTER*/
.modal-footer {
background-color: #F5F5F5;
border-radius: 0 0 6px 6px;
border-top: 1px solid #DDDDDD;
box-shadow: 0 1px 0 #FFFFFF inset;
margin-bottom: 0;
padding: 14px 15px 15px;
text-align: right;
}
.modal-footer:before, .modal-footer:after {
content: "";
display: table;
line-height: 0;
}
.modal-footer:after {
clear: both;
}
.modal-footer .btn+.btn {
margin-bottom: 0;
margin-left: 5px;
}
.modal-footer .btn-group .btn+.btn {
margin-left: -1px;
}
.modal-footer .btn-block+.btn-block {
margin-left: 0;
}
/*TOOLTIP*/
.tooltip {
display: block;
font-size: 11px;
line-height: 1.4;
opacity: 0;
position: absolute;
visibility: visible;
z-index: 1030;
}
.tooltip.in {
opacity: 0.8;
}
.tooltip.top {
margin-top: -3px;
padding: 5px 0;
}
.tooltip.right {
margin-left: 3px;
padding: 0 5px;
}
.tooltip.bottom {
margin-top: 3px;
padding: 5px 0;
}
.tooltip.left {
margin-left: -3px;
padding: 0 5px;
}
.tooltip-inner {
background-color: #000000;
border-radius: 4px;
color: #FFFFFF;
max-width: 200px;
padding: 8px;
text-align: center;
text-decoration: none;
}
.tooltip-arrow {
border-color: rgba(0, 0, 0, 0);
border-style: solid;
height: 0;
position: absolute;
width: 0;
}
.tooltip.top .tooltip-arrow {
border-top-color: #000000;
border-width: 5px 5px 0;
bottom: 0;
left: 50%;
margin-left: -5px;
}
.tooltip.right .tooltip-arrow {
border-right-color: #000000;
border-width: 5px 5px 5px 0;
left: 0;
margin-top: -5px;
top: 50%;
}
.tooltip.left .tooltip-arrow {
border-left-color: #000000;
border-width: 5px 0 5px 5px;
margin-top: -5px;
right: 0;
top: 50%;
}
.tooltip.bottom .tooltip-arrow {
border-bottom-color: #000000;
border-width: 0 5px 5px;
left: 50%;
margin-left: -5px;
top: 0;
}
/*BREADCRUMB*/
.breadcrumb {
background-color: #F5F5F5;
border-radius: 4px;
list-style: none outside none;
margin: 0 0 20px;
padding: 8px 15px;
}
.breadcrumb>li {
display: inline-block;
text-shadow: 0 1px 0 #FFFFFF;
}
.breadcrumb>li>.divider {
color: #CCCCCC;
padding: 0 5px;
}
.breadcrumb>.active {
color: #999999;
}
/*TABLE*/
.table {
margin-bottom: 20px;
width: 100%;
}
.table th, .table td {
border-top: 1px solid #DDDDDD;
line-height: 20px;
padding: 8px;
text-align: left;
vertical-align: top;
}
.table th {
font-weight: bold;
}
.table thead th {
vertical-align: bottom;
}
.table caption+thead tr:first-child th, .table caption+thead tr:first-child td,
.table colgroup+thead tr:first-child th, .table colgroup+thead tr:first-child td,
.table thead:first-child tr:first-child th, .table thead:first-child tr:first-child td
{
border-top: 0 none;
}
.table tbody+tbody {
border-top: 2px solid #DDDDDD;
}
.table .table {
background-color: #FFFFFF;
}
.table-condensed th, .table-condensed td {
padding: 4px 5px;
}
.table-bordered {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
border-collapse: separate;
border-color: #DDDDDD #DDDDDD #DDDDDD -moz-use-text-color;
border-image: none;
border-radius: 4px;
border-style: solid solid solid none;
border-width: 1px 1px 1px 0;
}
.table-bordered th, .table-bordered td {
border-left: 1px solid #DDDDDD;
}
.table-bordered caption+thead tr:first-child th, .table-bordered caption+tbody tr:first-child th,
.table-bordered caption+tbody tr:first-child td, .table-bordered colgroup+thead tr:first-child th,
.table-bordered colgroup+tbody tr:first-child th, .table-bordered colgroup+tbody tr:first-child td,
.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child td {
border-top: 0 none;
}
.table-bordered thead:first-child tr:first-child>th:first-child,
.table-bordered tbody:first-child tr:first-child>td:first-child,
.table-bordered tbody:first-child tr:first-child>th:first-child {
border-top-left-radius: 4px;
}
.table-bordered thead:first-child tr:first-child>th:last-child,
.table-bordered tbody:first-child tr:first-child>td:last-child,
.table-bordered tbody:first-child tr:first-child>th:last-child {
border-top-right-radius: 4px;
}
.table-bordered thead:last-child tr:last-child>th:first-child,
.table-bordered tbody:last-child tr:last-child>td:first-child,
.table-bordered tbody:last-child tr:last-child>th:first-child,
.table-bordered tfoot:last-child tr:last-child>td:first-child,
.table-bordered tfoot:last-child tr:last-child>th:first-child {
border-bottom-left-radius: 4px;
}
.table-bordered thead:last-child tr:last-child>th:last-child,
.table-bordered tbody:last-child tr:last-child>td:last-child,
.table-bordered tbody:last-child tr:last-child>th:last-child,
.table-bordered tfoot:last-child tr:last-child>td:last-child,
.table-bordered tfoot:last-child tr:last-child>th:last-child {
border-bottom-right-radius: 4px;
}
.table-bordered tfoot+tbody:last-child tr:last-child td:first-child {
border-bottom-left-radius: 0;
}
.table-bordered tfoot+tbody:last-child tr:last-child td:last-child {
border-bottom-right-radius: 0;
}
.table-bordered caption+thead tr:first-child th:first-child,
.table-bordered caption+tbody tr:first-child td:first-child,
.table-bordered colgroup+thead tr:first-child th:first-child,
.table-bordered colgroup+tbody tr:first-child td:first-child {
border-top-left-radius: 4px;
}
.table-bordered caption+thead tr:first-child th:last-child,
.table-bordered caption+tbody tr:first-child td:last-child,
.table-bordered colgroup+thead tr:first-child th:last-child,
.table-bordered colgroup+tbody tr:first-child td:last-child {
border-top-right-radius: 4px;
}
.table-striped tbody>tr:nth-child(2n+1)>td, .table-striped tbody>tr:nth-child(2n+1)>th
{
background-color: #F9F9F9;
}
.table-hover tbody tr:hover>td, .table-hover tbody tr:hover>th {
background-color: #F5F5F5;
}
table td[class*="span"], table th[class*="span"], .row-fluid table td[class*="span"],
.row-fluid table th[class*="span"] {
display: table-cell;
float: none;
margin-left: 0;
}
.table td.span1, .table th.span1 {
float: none;
margin-left: 0;
width: 44px;
}
.table td.span2, .table th.span2 {
float: none;
margin-left: 0;
width: 124px;
}
.table td.span3, .table th.span3 {
float: none;
margin-left: 0;
width: 204px;
}
.table td.span4, .table th.span4 {
float: none;
margin-left: 0;
width: 284px;
}
.table td.span5, .table th.span5 {
float: none;
margin-left: 0;
width: 364px;
}
.table td.span6, .table th.span6 {
float: none;
margin-left: 0;
width: 444px;
}
.table td.span7, .table th.span7 {
float: none;
margin-left: 0;
width: 524px;
}
.table td.span8, .table th.span8 {
float: none;
margin-left: 0;
width: 604px;
}
.table td.span9, .table th.span9 {
float: none;
margin-left: 0;
width: 684px;
}
.table td.span10, .table th.span10 {
float: none;
margin-left: 0;
width: 764px;
}
.table td.span11, .table th.span11 {
float: none;
margin-left: 0;
width: 844px;
}
.table td.span12, .table th.span12 {
float: none;
margin-left: 0;
width: 924px;
}
.table tbody tr.success>td {
background-color: #DFF0D8;
}
.table tbody tr.error>td {
background-color: #F2DEDE;
}
.table tbody tr.warning>td {
background-color: #FCF8E3;
}
.table tbody tr.info>td {
background-color: #D9EDF7;
}
.table-hover tbody tr.success:hover>td {
background-color: #D0E9C6;
}
.table-hover tbody tr.error:hover>td {
background-color: #EBCCCC;
}
.table-hover tbody tr.warning:hover>td {
background-color: #FAF2CC;
}
.table-hover tbody tr.info:hover>td {
background-color: #C4E3F3;
}
/*BUTTONS*/
button.close {
background: none repeat scroll 0 0 rgba(0, 0, 0, 0);
border: 0 none;
cursor: pointer;
padding: 0;
}
.btn {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #F5F5F5;
background-image: linear-gradient(to bottom, #FFFFFF, #E6E6E6);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) #B3B3B3;
border-image: none;
border-radius: 4px;
border-style: solid;
border-width: 1px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 1px 2px
rgba(0, 0, 0, 0.05);
color: #333333;
cursor: pointer;
display: inline-block;
font-size: 14px;
line-height: 20px;
margin-bottom: 0;
padding: 4px 12px;
text-align: center;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
vertical-align: middle;
}
.btn:hover, .btn:focus, .btn:active, .btn.active, .btn.disabled, .btn[disabled]
{
background-color: #E6E6E6;
color: #333333;
}
.btn:active, .btn.active {
}
.btn:first-child {
}
.btn:hover, .btn:focus {
background-position: 0 -15px;
color: #333333;
text-decoration: none;
transition: background-position 0.1s linear 0s;
}
.btn:focus {
outline: thin dotted #333333;
outline-offset: -2px;
}
.btn.active, .btn:active {
background-image: none;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15) inset, 0 1px 2px
rgba(0, 0, 0, 0.05);
outline: 0 none;
}
.btn.disabled, .btn[disabled] {
background-image: none;
box-shadow: none;
cursor: default;
opacity: 0.65;
}
.btn-large {
border-radius: 6px;
font-size: 17.5px;
padding: 11px 19px;
}
.btn-large [class^="icon-"], .btn-large [class*=" icon-"] {
margin-top: 4px;
}
.btn-small {
border-radius: 3px;
font-size: 11.9px;
padding: 2px 10px;
}
.btn-small [class^="icon-"], .btn-small [class*=" icon-"] {
margin-top: 0;
}
.btn-mini [class^="icon-"], .btn-mini [class*=" icon-"] {
margin-top: -1px;
}
.btn-mini {
border-radius: 3px;
font-size: 10.5px;
padding: 0 6px;
}
.btn-block {
-moz-box-sizing: border-box;
display: block;
padding-left: 0;
padding-right: 0;
width: 100%;
}
.btn-block+.btn-block {
margin-top: 5px;
}
input.btn-block[type="submit"], input.btn-block[type="reset"], input.btn-block[type="button"]
{
width: 100%;
}
.btn-primary.active, .btn-warning.active, .btn-danger.active,
.btn-success.active, .btn-info.active, .btn-inverse.active {
color: rgba(255, 255, 255, 0.75);
}
.btn-primary {
background-color: #006DCC;
background-image: linear-gradient(to bottom, #0088CC, #0044CC);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active,
.btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] {
background-color: #0044CC;
color: #FFFFFF;
}
.btn-primary:active, .btn-primary.active {
}
.btn-warning {
background-color: #FAA732;
background-image: linear-gradient(to bottom, #FBB450, #F89406);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.btn-warning:hover, .btn-warning:focus, .btn-warning:active,
.btn-warning.active, .btn-warning.disabled, .btn-warning[disabled] {
background-color: #F89406;
color: #FFFFFF;
}
.btn-warning:active, .btn-warning.active {
}
.btn-danger {
background-color: #DA4F49;
background-image: linear-gradient(to bottom, #EE5F5B, #BD362F);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active,
.btn-danger.disabled, .btn-danger[disabled] {
background-color: #BD362F;
color: #FFFFFF;
}
.btn-danger:active, .btn-danger.active {
}
.btn-success {
background-color: #5BB75B;
background-image: linear-gradient(to bottom, #62C462, #51A351);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.btn-success:hover, .btn-success:focus, .btn-success:active,
.btn-success.active, .btn-success.disabled, .btn-success[disabled] {
background-color: #51A351;
color: #FFFFFF;
}
.btn-success:active, .btn-success.active {
}
.btn-info {
background-color: #49AFCD;
background-image: linear-gradient(to bottom, #5BC0DE, #2F96B4);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active,
.btn-info.disabled, .btn-info[disabled] {
background-color: #2F96B4;
color: #FFFFFF;
}
.btn-info:active, .btn-info.active {
}
.btn-inverse {
background-color: #363636;
background-image: linear-gradient(to bottom, #444444, #222222);
background-repeat: repeat-x;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.btn-inverse:hover, .btn-inverse:focus, .btn-inverse:active,
.btn-inverse.active, .btn-inverse.disabled, .btn-inverse[disabled] {
background-color: #222222;
color: #FFFFFF;
}
.btn-inverse:active, .btn-inverse.active {
}
button.btn, input.btn[type="submit"] {
}
button.btn::-moz-focus-inner, input.btn[type="submit"]::-moz-focus-inner
{
border: 0 none;
padding: 0;
}
button.btn.btn-large, input.btn.btn-large[type="submit"] {
}
button.btn.btn-small, input.btn.btn-small[type="submit"] {
}
button.btn.btn-mini, input.btn.btn-mini[type="submit"] {
}
.btn-link, .btn-link:active, .btn-link[disabled] {
background-color: rgba(0, 0, 0, 0);
background-image: none;
box-shadow: none;
}
.btn-link {
border-color: rgba(0, 0, 0, 0);
border-radius: 0;
color: #0088CC;
cursor: pointer;
}
.btn-link:hover, .btn-link:focus {
background-color: rgba(0, 0, 0, 0);
color: #005580;
text-decoration: underline;
}
.btn-link[disabled]:hover, .btn-link[disabled]:focus {
color: #333333;
text-decoration: none;
}
.btn-group {
display: inline-block;
font-size: 0;
position: relative;
vertical-align: middle;
white-space: nowrap;
}
.btn-group:first-child {
}
.btn-group+.btn-group {
margin-left: 5px;
}
.btn-toolbar {
font-size: 0;
margin-bottom: 10px;
margin-top: 10px;
}
.btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group
{
margin-left: 5px;
}
.btn-group>.btn {
border-radius: 0;
position: relative;
}
.btn-group>.btn+.btn {
margin-left: -1px;
}
.btn-group>.btn, .btn-group>.dropdown-menu, .btn-group>.popover {
font-size: 14px;
}
.btn-group>.btn-mini {
font-size: 10.5px;
}
.btn-group>.btn-small {
font-size: 11.9px;
}
.btn-group>.btn-large {
font-size: 17.5px;
}
.btn-group>.btn:first-child {
border-bottom-left-radius: 4px;
border-top-left-radius: 4px;
margin-left: 0;
}
.btn-group>.btn:last-child, .btn-group>.dropdown-toggle {
border-bottom-right-radius: 4px;
border-top-right-radius: 4px;
}
.btn-group>.btn.large:first-child {
border-bottom-left-radius: 6px;
border-top-left-radius: 6px;
margin-left: 0;
}
.btn-group>.btn.large:last-child, .btn-group>.large.dropdown-toggle {
border-bottom-right-radius: 6px;
border-top-right-radius: 6px;
}
.btn-group>.btn:hover, .btn-group>.btn:focus, .btn-group>.btn:active,
.btn-group>.btn.active {
z-index: 2;
}
.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
outline: 0 none;
}
.btn-group>.btn+.dropdown-toggle {
box-shadow: 1px 0 0 rgba(255, 255, 255, 0.125) inset, 0 1px 0
rgba(255, 255, 255, 0.2) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
padding-left: 8px;
padding-right: 8px;
}
.btn-group>.btn-mini+.dropdown-toggle {
padding-left: 5px;
padding-right: 5px;
}
.btn-group>.btn-small+.dropdown-toggle {
}
.btn-group>.btn-large+.dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
background-image: none;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15) inset, 0 1px 2px
rgba(0, 0, 0, 0.05);
}
.btn-group.open .btn.dropdown-toggle {
background-color: #E6E6E6;
}
.btn-group.open .btn-primary.dropdown-toggle {
background-color: #0044CC;
}
.btn-group.open .btn-warning.dropdown-toggle {
background-color: #F89406;
}
.btn-group.open .btn-danger.dropdown-toggle {
background-color: #BD362F;
}
.btn-group.open .btn-success.dropdown-toggle {
background-color: #51A351;
}
.btn-group.open .btn-info.dropdown-toggle {
background-color: #2F96B4;
}
.btn-group.open .btn-inverse.dropdown-toggle {
background-color: #222222;
}
.btn .caret {
margin-left: 0;
margin-top: 8px;
}
.btn-large .caret {
margin-top: 6px;
}
.btn-large .caret {
border-left-width: 5px;
border-right-width: 5px;
border-top-width: 5px;
}
.btn-mini .caret, .btn-small .caret {
margin-top: 8px;
}
.dropup .btn-large .caret {
border-bottom-width: 5px;
}
.btn-primary .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret,
.btn-success .caret, .btn-inverse .caret {
border-bottom-color: #FFFFFF;
border-top-color: #FFFFFF;
}
.btn-group-vertical {
display: inline-block;
}
.btn-group-vertical>.btn {
border-radius: 0;
display: block;
float: none;
max-width: 100%;
}
.btn-group-vertical>.btn+.btn {
margin-left: 0;
margin-top: -1px;
}
.btn-group-vertical>.btn:first-child {
border-radius: 4px 4px 0 0;
}
.btn-group-vertical>.btn:last-child {
border-radius: 0 0 4px 4px;
}
.btn-group-vertical>.btn-large:first-child {
border-radius: 6px 6px 0 0;
}
.btn-group-vertical>.btn-large:last-child {
border-radius: 0 0 6px 6px;
}
/*CLOSE*/
.close {
color: #000000;
float: right;
font-size: 20px;
font-weight: bold;
line-height: 20px;
opacity: 0.2;
text-shadow: 0 1px 0 #FFFFFF;
}
.close:hover, .close:focus {
color: #000000;
cursor: pointer;
opacity: 0.4;
text-decoration: none;
}
/*ALERTS*/
.alert {
background-color: #FCF8E3;
border: 1px solid #FBEED5;
border-radius: 4px;
margin-bottom: 20px;
padding: 8px 35px 8px 14px;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
}
.alert, .alert h4 {
color: #C09853;
}
.alert h4 {
margin: 0;
}
.alert .close {
line-height: 20px;
position: relative;
right: -21px;
top: -2px;
}
.alert-success {
background-color: #DFF0D8;
border-color: #D6E9C6;
color: #468847;
}
.alert-success h4 {
color: #468847;
}
.alert-danger, .alert-error {
background-color: #F2DEDE;
border-color: #EED3D7;
color: #B94A48;
}
.alert-danger h4, .alert-error h4 {
color: #B94A48;
}
.alert-info {
background-color: #D9EDF7;
border-color: #BCE8F1;
color: #3A87AD;
}
.alert-info h4 {
color: #3A87AD;
}
.alert-block {
padding-bottom: 14px;
padding-top: 14px;
}
.alert-block>p, .alert-block>ul {
margin-bottom: 0;
}
.alert-block p+p {
margin-top: 5px;
}
/*A LINK*/
a {
color: #0088CC;
text-decoration: none;
}
a:hover, a:focus {
color: #005580;
text-decoration: underline;
}

View File

@ -65,7 +65,7 @@ public class ItemBuilder {
}
/**
* Gets the item
* Gets the item.
*
* @param parent the parent
* @param workspaceItem the workspace item
@ -151,6 +151,7 @@ public class ItemBuilder {
}
}
/**
* Filter item.
*
@ -161,9 +162,14 @@ public class ItemBuilder {
* @throws InternalErrorException the internal error exception
*/
protected static boolean filterItem(ItemType type, WorkspaceItem item, FilterCriteria filterCriteria) throws InternalErrorException {
if(filterCriteria==null) return true;
boolean mimeTypeCheck = checkAllowedMimeTypes(type, item, filterCriteria.getAllowedMimeTypes());
if (!mimeTypeCheck) return false;
boolean fileExtensionCheck = checkAllowedFileExtension(type, item, filterCriteria.getAllowedFileExtensions());
if(!fileExtensionCheck) return false;
boolean propertiesCheck = checkProperties(item, filterCriteria.getRequiredProperties());
return propertiesCheck;
}
@ -177,7 +183,7 @@ public class ItemBuilder {
* @return true, if successful
*/
protected static boolean checkAllowedMimeTypes(ItemType type, WorkspaceItem item, List<String> allowedMimeTypes){
if (allowedMimeTypes.size()==0) return true;
if (allowedMimeTypes==null || allowedMimeTypes.size()==0) return true;
if (type == ItemType.EXTERNAL_FILE || type == ItemType.EXTERNAL_IMAGE || type == ItemType.EXTERNAL_PDF_FILE) {
ExternalFile externalFile = (ExternalFile)item;
@ -188,6 +194,60 @@ public class ItemBuilder {
}
/**
* Check allowed file extension.
*
* @param type the type
* @param item the item
* @param allowedFileExtension the allowed mime types
* @return true, if successful
*/
protected static boolean checkAllowedFileExtension(ItemType type, WorkspaceItem item, List<String> allowedFileExtension){
if (allowedFileExtension==null || allowedFileExtension.size()==0) return true;
try {
if (type != ItemType.FOLDER) {
String name = item.getName();
return checkFileExtension(name, allowedFileExtension);
}
return true;
} catch (InternalErrorException e) {
_log.error("checkAllowedFileExtension, InternalErrorException: ",e);
return false;
}
}
/**
* Check file extension.
*
* @param fileName the file name
* @param allowedFileExtension the allowed file extension
* @return true, if successful
*/
protected static boolean checkFileExtension(String fileName, List<String> allowedFileExtension){
if(fileName==null || fileName.isEmpty()) return false;
int dot = fileName.lastIndexOf(".");
if(dot>=0 && (dot+1)<=fileName.length()){
String ext = fileName.substring(dot+1, fileName.length());
_log.trace("Extension found: "+ext +" for: "+fileName);
// if(ext.isEmpty())
// return false;
for (String fe : allowedFileExtension) {
if(ext.compareTo(fe)==0)
return true;
}
return false;
}
_log.trace("Extension not found for: "+fileName);
return false;
}
/**
* Check properties.
*
@ -198,7 +258,7 @@ public class ItemBuilder {
*/
protected static boolean checkProperties(WorkspaceItem item, Map<String, String> requestedProperties) throws InternalErrorException
{
if (requestedProperties.size()==0 || item.getType()!=WorkspaceItemType.FOLDER_ITEM) return true;
if (requestedProperties==null || requestedProperties.size()==0 || item.getType()!=WorkspaceItemType.FOLDER_ITEM) return true;
Map<String, String> itemProperties = item.getProperties().getProperties();
for (Entry<String, String> requestProperty:requestedProperties.entrySet()) {
@ -247,6 +307,12 @@ public class ItemBuilder {
return item;
}
/**
* Checks if is special folder.
*
* @param wsFolder the ws folder
* @return true, if is special folder
*/
public static boolean isSpecialFolder(WorkspaceFolder wsFolder){
try {
@ -256,4 +322,13 @@ public class ItemBuilder {
return false;
}
}
/*
public static void main(String[] args) {
List<String> allowedFileExtension = new ArrayList<String>();
allowedFileExtension.add("csv");
allowedFileExtension.add("");
String fileName = "t";
System.out.println(checkFileExtension(fileName, allowedFileExtension));
}*/
}

View File

@ -17,30 +17,68 @@ import java.util.Map;
public class FilterCriteria implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1912760277441333686L;
protected List<String> allowedMimeTypes;
protected Map<String, String> requiredProperties;
protected List<String> allowedFileExtensions;
/**
* Instantiates a new filter criteria.
*/
public FilterCriteria(){}
/**
* Instantiates a new filter criteria.
*
* @param allowedMimeTypes the allowed mime types
* @param allowedFileExtensions the allowed file extensions
* @param requiredProperties the required properties
*/
public FilterCriteria(List<String> allowedMimeTypes,
Map<String, String> requiredProperties) {
public FilterCriteria(List<String> allowedMimeTypes, List<String> allowedFileExtensions, Map<String, String> requiredProperties) {
this.allowedMimeTypes = allowedMimeTypes;
this.allowedFileExtensions = allowedFileExtensions;
this.requiredProperties = requiredProperties;
}
/**
* Sets the allowed mime types.
*
* @param allowedMimeTypes the allowedMimeTypes to set
*/
public void setAllowedMimeTypes(List<String> allowedMimeTypes) {
this.allowedMimeTypes = allowedMimeTypes;
}
/**
* Sets the required properties.
*
* @param requiredProperties the requiredProperties to set
*/
public void setRequiredProperties(Map<String, String> requiredProperties) {
this.requiredProperties = requiredProperties;
}
/**
* Sets the allowed file extensions.
*
* @param allowedFileExtensions the allowedFileExtensions to set
*/
public void setAllowedFileExtensions(List<String> allowedFileExtensions) {
this.allowedFileExtensions = allowedFileExtensions;
}
/**
* Gets the allowed file extensions.
*
* @return the allowed file extensions
*/
public List<String> getAllowedFileExtensions() {
return allowedFileExtensions;
}
/**
* Gets the allowed mime types.
*
@ -59,8 +97,9 @@ public class FilterCriteria implements Serializable {
return requiredProperties;
}
/**
* {@inheritDoc}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
@ -69,6 +108,8 @@ public class FilterCriteria implements Serializable {
builder.append(allowedMimeTypes);
builder.append(", requiredProperties=");
builder.append(requiredProperties);
builder.append(", allowedFileExtensions=");
builder.append(allowedFileExtensions);
builder.append("]");
return builder.toString();
}

View File

@ -2,22 +2,35 @@
<module rename-to='WorkspaceExplorer'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User' />
<inherits name="com.github.gwtbootstrap.Bootstrap" />
<!-- UNCOMMNET TO USE GWT 2.7 SUPER DEV MODE -->
<set-configuration-property name='xsiframe.failIfScriptTag'
value='FALSE' />
<script src="jquery-1.10.1.min.js"></script>
<script src="bootstrap.min.js"></script>
<!-- Inherit the default GWT style sheet. You can change -->
<!-- the theme of your GWT application by uncommenting -->
<!-- any one of the following lines. -->
<inherits name="com.github.gwtbootstrap.Bootstrap" />
<inherits name='com.google.gwt.user.theme.standard.Standard' />
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
<stylesheet src='workspace-explorer.css' />
<!-- Other module inherits -->
<!-- Specify the app entry point class. -->
<!-- <entry-point class='org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorer' /> -->
<!-- <entry-point class='org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorer'/> -->
<!-- Specify the paths for translatable code -->
<source path='client' />
<source path='shared' />
</module>
<!--pay attention in this part -->
<source path='resources' />
<replace-with class="org.gcube.portlets.widgets.wsexplorer.resources.BootstrapConfigurator">
<when-type-is class="com.github.gwtbootstrap.client.ui.config.Configurator" />
</replace-with>
<public path="resources">
<exclude name="** /*.java" />
<exclude name="** /*.class" />
</public>
</module>

View File

@ -39,12 +39,11 @@ public class TestGetChildren {
boolean purgeEmpyFolders = false;
List<String> allowedMimeTypes = new ArrayList<String>();
Map<String, String> requiredProperties = new HashMap<String, String>();
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties);
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,null,null);
getRoot(showableTypes, purgeEmpyFolders, filterCriteria);
}
public static Item getRoot(List<ItemType> showableTypes, boolean purgeEmpyFolders, FilterCriteria filterCriteria) throws WorkspaceNavigatorServiceException {
_log.trace("getRoot showableTypes: "+showableTypes+" purgeEmpyFolders: "+purgeEmpyFolders+" filterCriteria: "+ filterCriteria);
@ -92,5 +91,4 @@ public class TestGetChildren {
}
}
}

View File

@ -54,7 +54,7 @@ public class TestGetSize {
boolean purgeEmpyFolders = false;
List<String> allowedMimeTypes = new ArrayList<String>();
Map<String, String> requiredProperties = new HashMap<String, String>();
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,requiredProperties);
FilterCriteria filterCriteria = new FilterCriteria(allowedMimeTypes,null,null);
try {