diff --git a/.classpath b/.classpath index d0c2c7b..0762a64 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -36,5 +36,5 @@ - + diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs index f0bbdc0..1cc3e8b 100644 --- a/.settings/com.google.gdt.eclipse.core.prefs +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 jarsExcludedFromWebInfLib= -lastWarOutDir=/Users/massi/Documents/workspace/resource-management/target/resource-management-5.0.0-SNAPSHOT +lastWarOutDir=/Users/massi/Documents/workspace/resource-management/target/resource-management-5.0.1-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/pom.xml b/pom.xml index b565af2..ed07be1 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.gcube.portlets.admin resource-management - 5.0.0-SNAPSHOT + 5.0.1-SNAPSHOT war gCube Resource Management Portlet @@ -39,7 +39,17 @@ UTF-8 UTF-8 - + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + com.sencha.gxt @@ -77,34 +85,63 @@ rmp-common-library [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + + + org.gcube.resources.discovery + ic-client + + + org.gcube.core + common-scope-maps + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + + + org.gcube.resourcemanagement + resourcemanager-client + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + + + org.gcube.resources + registry-publisher + [1.1.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + + + org.gcube.resourcemanagement + ghn-manager-client + [1.1.0-SNAPSHOT, 2.0.0-SNAPSHOT) + provided + + + org.gcube.resourcemanagement + ghnmanager-stubs + provided + org.gcube.applicationsupportlayer aslcore - [3.2.0-SNAPSHOT, 4.0.0-SNAPSHOT) provided org.gcube.portlets.user home-library - [4.3.0-SNAPSHOT, 5.0.0-SNAPSHOT) provided org.gcube.portlets.user home-library-jcr - [1.3.0-SNAPSHOT, 2.0.0-SNAPSHOT) provided org.gcube.applicationsupportlayer accesslogger - [1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT) provided org.gcube.portlets.user gcube-widgets - [1.4.0-SNAPSHOT, 2.0.0-SNAPSHOT) provided @@ -116,7 +153,6 @@ org.gcube.portal custom-portal-handler - [1.2.0-SNAPSHOT, 2.0.0-SNAPSHOT) provided @@ -157,7 +193,6 @@ net.customware.gwt.dispatch gwt-dispatch - 1.2.0 provided @@ -176,57 +211,48 @@ javax.portlet portlet-api - 2.0 provided commons-lang commons-lang - 2.6 provided org.apache.commons commons-compress - 1.4.1 provided commons-fileupload commons-fileupload - 1.2.1 provided commons-io commons-io - 2.4 provided log4j log4j - 1.2.16 runtime org.slf4j slf4j-log4j12 - 1.6.4 runtime org.slf4j slf4j-api - 1.6.4 runtime com.allen-sauer.gwt.log gwt-log - 3.1.7 provided diff --git a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/ResourceManagementPortlet.java b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/ResourceManagementPortlet.java index a2e65da..ef60e3c 100644 --- a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/ResourceManagementPortlet.java +++ b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/ResourceManagementPortlet.java @@ -462,22 +462,22 @@ public class ResourceManagementPortlet implements EntryPoint { MenuItem cleanGHN = new MenuItem("Resource Sweeper") { protected void onClick(final ComponentEvent be) { - super.onClick(be); - if (SupportedOperations.SWEEP_GHN.isAllowed(StatusHandler.getStatus().getCredentials())) { - GWT.runAsync(SweeperDialog.class, new RunAsyncCallback() { - @Override - public void onSuccess() { - String currentScope = StatusHandler.getStatus().getCurrentScope(); - new SweeperDialog(currentScope); - } - - public void onFailure(Throwable reason) { - Window.alert("There are networks problem, please check your connection."); - } - }); - } - else - MessageBox.alert("Resource Sweeper", "You are not allowed to execute this operation", null); + super.onClick(be); + if (SupportedOperations.SWEEP_GHN.isAllowed(StatusHandler.getStatus().getCredentials())) { + GWT.runAsync(SweeperDialog.class, new RunAsyncCallback() { + @Override + public void onSuccess() { + String currentScope = StatusHandler.getStatus().getCurrentScope(); + new SweeperDialog(currentScope); + } + + public void onFailure(Throwable reason) { + Window.alert("There are networks problem, please check your connection."); + } + }); + } + else + MessageBox.alert("Resource Sweeper", "You are not allowed to execute this operation", null); }; }; @@ -495,9 +495,20 @@ public class ResourceManagementPortlet implements EntryPoint { OpCommands.doOpenGenericResourceForm(); }; }; + createGR.setIconStyle("genericresource-icon"); createMnu.add(createGR); + // Create Service Endpoint (former Runtime Resource) + MenuItem createSE = new MenuItem("Service Endpoint") { + protected void onClick(final ComponentEvent be) { + super.onClick(be); + OpCommands.doOpenServiceEndpointForm(); + }; + }; + createSE.setIconStyle("runtimeresource-icon"); + createMnu.add(createSE); + // Create activation record from plugins MenuItem createARTM = new MenuItem("Activation Record for Tree Manager") { protected void onClick(final ComponentEvent be) { diff --git a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/utils/OpCommands.java b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/utils/OpCommands.java index 05ac796..64642c7 100644 --- a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/utils/OpCommands.java +++ b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/utils/OpCommands.java @@ -34,6 +34,7 @@ import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.widget.MessageBox; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -88,7 +89,7 @@ public class OpCommands { StatusHandler.getStatus().getCurrentScope(), toSend, OpCallBacks.handleGenericOperation(SupportedOperations.GHN_SHUTDOWN) - ); + ); } catch (Exception e) { ConsoleMessageBroker.error(OpCommands.class, e.getMessage()); MessageBox.info( @@ -117,7 +118,7 @@ public class OpCommands { StatusHandler.getStatus().getCurrentScope(), toSend, OpCallBacks.handleGenericOperation(SupportedOperations.GHN_RESTART) - ); + ); } catch (Exception e) { ConsoleMessageBroker.error(OpCommands.class, e.getMessage()); MessageBox.info( @@ -153,7 +154,7 @@ public class OpCommands { StatusHandler.getStatus().getCurrentScope(), toSend, OpCallBacks.handleGenericOperation(requiredPermissions) - ); + ); } catch (Exception e) { ConsoleMessageBroker.error(OpCommands.class, e.getMessage()); MessageBox.info( @@ -163,6 +164,17 @@ public class OpCommands { } } + /************************************************************* + * SERVICE ENDPOINT + ************************************************************/ + public static final void doOpenServiceEndpointForm() { + if (SupportedOperations.GENERIC_RESOURCE_CREATE.isAllowed(StatusHandler.getStatus().getCredentials())) { + loadServiceEndopointEditor(null); + } else { + MessageBox.alert("Service Endpoint Creation", "You are not allowed to execute this operation", null); + } + } + /************************************************************* * GENERIC RESOURCE @@ -175,6 +187,8 @@ public class OpCommands { } } + + public static final void doCreateGenericResource( final String id, final String name, @@ -200,10 +214,10 @@ public class OpCommands { public void onFailure(final Throwable caught) { MessageBox.alert("Generic Resouce Creation", "Generic Resource Creation failure:
" + - ((caught != null && caught.getMessage() != null) ? - caught.getMessage() : - "See server log for further details."), - null); + ((caught != null && caught.getMessage() != null) ? + caught.getMessage() : + "See server log for further details."), + null); } }); } else { @@ -229,10 +243,10 @@ public class OpCommands { public void onFailure(final Throwable caught) { MessageBox.alert("Generic Resouce Creation", "Generic Resource Creation failure:
" + - ((caught != null && caught.getMessage() != null) ? - caught.getMessage() : - "See server log for further details."), - null); + ((caught != null && caught.getMessage() != null) ? + caught.getMessage() : + "See server log for further details."), + null); } }); } else { @@ -287,4 +301,32 @@ public class OpCommands { }); } } + + + /** + * Redirect to Service Endpoint Editor + * @param idToEdit + */ + public static void loadServiceEndopointEditor(String idToEdit) { + + String location = Window.Location.getHref(); + String res2EditParam = ""; + if (idToEdit != null) { + res2EditParam = "&rid=" + idToEdit; + } + + if (location.endsWith("/") || location.endsWith("#")) { //standalone + location = com.google.gwt.user.client.Window.Location.getProtocol() +"//"+ com.google.gwt.user.client.Window.Location.getHost() + + "/runtime-resource?pid=126&lifecycle=0&state=maximized&modes=view&doAsId=10136&refererPlid=10139&authzToken=101334249" + + "&curscope="+StatusHandler.getStatus().getCurrentScope()+res2EditParam; + } + else { //portal + location += "/../runtime-resource?pid=126&lifecycle=0&state=maximized&modes=view&doAsId=10136&refererPlid=10139&authzToken=101334249" + + "&curscope="+StatusHandler.getStatus().getCurrentScope()+res2EditParam; + } + Window.open(location, "_blank", ""); + } + + + } diff --git a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/views/resourcedetails/ContextMenuFactory.java b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/views/resourcedetails/ContextMenuFactory.java index e0d651f..13e21be 100644 --- a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/views/resourcedetails/ContextMenuFactory.java +++ b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/views/resourcedetails/ContextMenuFactory.java @@ -23,10 +23,8 @@ import org.gcube.portlets.admin.resourcemanagement.client.forms.genericresources import org.gcube.portlets.admin.resourcemanagement.client.remote.ProxyRegistry; import org.gcube.portlets.admin.resourcemanagement.client.utils.Commands; import org.gcube.portlets.admin.resourcemanagement.client.utils.OpCommands; - import org.gcube.portlets.admin.resourcemanagement.client.widgets.console.ConsoleMessageBroker; import org.gcube.portlets.admin.resourcemanagement.client.widgets.registry.UIIdentifiers; - import org.gcube.resourcemanagement.support.client.utils.StatusHandler; import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator; import org.gcube.resourcemanagement.support.shared.operations.SupportedOperations; @@ -637,7 +635,7 @@ public class ContextMenuFactory { for (ModelData e : container.getSelection()) { idToEdit = e.get("ID"); } - loadRuntimeResourcePortlet(idToEdit); + OpCommands.loadServiceEndopointEditor(idToEdit); } }; // Checks the permissions on the operation @@ -687,37 +685,6 @@ public class ContextMenuFactory { return delete; } - String location; - /** - * Redirect to Runtime Resource Portlet - * @param idToEdit - */ - public void loadRuntimeResourcePortlet(String idToEdit){ - - getUrl(); - // Window.alert(location); - - if (location.endsWith("/") || location.endsWith("#")) { //standalone - location = com.google.gwt.user.client.Window.Location.getProtocol() +"//"+ com.google.gwt.user.client.Window.Location.getHost() + "/runtime-resource?pid=126&lifecycle=0&state=maximized&modes=view&doAsId=10136&refererPlid=10139&rid="+idToEdit+"&authzToken=101334249&curscope="+StatusHandler.getStatus().getCurrentScope(); - //GWT.log("OPEN " + location); - getURL(location); - } - else { //portal - getUrl(); - location += "/../runtime-resource?pid=126&lifecycle=0&state=maximized&modes=view&doAsId=10136&refererPlid=10139&rid="+idToEdit+"&authzToken=101334249&curscope="+StatusHandler.getStatus().getCurrentScope(); - Window.open(location, "_self", ""); - } - - } - - public static native void getURL(String url)/*-{ - $wnd.open(url,'target=_blank') - }-*/; - - /** - * Get URL from browser - */ - public native void getUrl()/*-{ - this.@org.gcube.portlets.admin.resourcemanagement.client.views.resourcedetails.ContextMenuFactory::location = $wnd.location.href; - }-*/; + + } diff --git a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarButton.java b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarButton.java index d8b6c1c..21a042c 100644 --- a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarButton.java +++ b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarButton.java @@ -20,6 +20,7 @@ import static com.google.gwt.query.client.GQuery.$; import java.util.ArrayList; import org.gcube.portlets.admin.resourcemanagement.client.utils.FWSTranslate; +import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator; import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.event.ComponentEvent; @@ -41,13 +42,11 @@ import com.google.gwt.user.client.ui.AbstractImagePrototype; * A selectable icon (post-it styled) and text added to the pinned resources (TaskbarWindow). */ public class TaskbarButton extends Component implements IconSupport { - private String type; + private ResourceTypeDecorator type; private String text; private AbstractImagePrototype icon; private El iconEl; - private ArrayList extractedColors = new ArrayList(); - /** * Creates a new shortcut. */ @@ -61,17 +60,28 @@ public class TaskbarButton extends Component implements IconSupport { * @param id the shortcut id * @param text the shortcut text */ - public TaskbarButton(final String id, final String type, final String text) { + public TaskbarButton(final String id, final ResourceTypeDecorator type, final String text) { setId(id); setText(text); this.type = type; + + //for IE + final Timer t2 = new Timer() { + @Override + public void run() { + getElement().getFirstChildElement().getStyle().setOpacity(0.8); + + } + }; //need to make sure the element is attached to the DOM Timer t = new Timer() { @Override public void run() { - $(getElement().getFirstChildElement()).animate("opacity:'0.9'", 500); + $(getElement().getFirstChildElement()).animate("opacity:'0.8'", 500); + t2.schedule(500); } }; + t.schedule(100); } @@ -154,8 +164,8 @@ public class TaskbarButton extends Component implements IconSupport { - final El a = el().createChild("
"); - iconEl = a.createChild(FWSTranslate.getFWSNameFromLabel(type)); + final El a = el().createChild("
"); + iconEl = a.createChild(FWSTranslate.getFWSNameFromLabel(type.toString())); El txt = a.createChild("
"); if (txt != null) { @@ -169,35 +179,24 @@ public class TaskbarButton extends Component implements IconSupport { } } - private String getExaBackgroundColor() { - //pick a random color - int no = Random.nextInt(7); - while (extractedColors.contains(no)) { - no = Random.nextInt(7); - } - extractedColors.add(no); - if (extractedColors.size() > 6) - extractedColors = new ArrayList(); - - switch (no) { - case 0: - return "#bebee4"; - case 1: - return "#CAEBFA"; - case 2: - return "#a8f2b5"; - case 3: - return "#fe99ad"; - case 4: - return "#ffd395"; - case 5: - return "#ffea97"; - case 6: - return "#d4d4d4"; + private String getExaBackgroundColor(ResourceTypeDecorator type) { + switch (type) { + case Collection: + return "#aa84c1"; //violet + case RunningInstance: + return "#8aacd2"; //blue + case GenericResource: + return "#79bd84"; //green + case GHN: + return "#a4d03b"; //ramarro + case RuntimeResource: + return "#e4df00"; //yellow + case Service: + return "#fea500"; //orange + case WSResource: + return "#f6634f"; //red default: - return "#a8f2b5"; + return "#CAEBFA"; //azur } - - } } diff --git a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarItem.java b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarItem.java index bee1a5d..76ea016 100644 --- a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarItem.java +++ b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarItem.java @@ -16,8 +16,6 @@ package org.gcube.portlets.admin.resourcemanagement.client.widgets.taskbar; -import static com.google.gwt.query.client.GQuery.$; - import org.gcube.portlets.admin.resourcemanagement.client.remote.ProxyRegistry; import org.gcube.portlets.admin.resourcemanagement.client.utils.Callbacks; import org.gcube.portlets.admin.resourcemanagement.client.utils.Commands; @@ -28,7 +26,6 @@ import org.gcube.resourcemanagement.support.shared.util.Configuration; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; -import com.google.gwt.core.client.GWT; /** * @author Massimiliano Assante (ISTI-CNR) @@ -66,7 +63,7 @@ public class TaskbarItem { private void initUI(final String title, final String id,final String buttonIcon) { - this.detachButton = new TaskbarButton("btn" + id, ""+type, title) { + this.detachButton = new TaskbarButton("btn" + id, type, title) { protected void onClick(final com.extjs.gxt.ui.client.event.ComponentEvent ce) { relatedWidget.doMinimize(); } diff --git a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarWindow.java b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarWindow.java index 4eef3a8..e1c4a48 100644 --- a/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarWindow.java +++ b/src/main/java/org/gcube/portlets/admin/resourcemanagement/client/widgets/taskbar/TaskbarWindow.java @@ -16,6 +16,8 @@ package org.gcube.portlets.admin.resourcemanagement.client.widgets.taskbar; +import java.util.ArrayList; + import org.gcube.portlets.admin.resourcemanagement.client.widgets.console.ConsoleMessageBroker; import org.gcube.resourcemanagement.support.shared.util.Configuration; @@ -33,6 +35,8 @@ import com.extjs.gxt.ui.client.widget.layout.FitLayout; public class TaskbarWindow extends Window { private TaskbarItem relatedItem = null; private boolean isMinimized = false; + + public static ArrayList extractedColors = new ArrayList(); protected TaskbarWindow(final TaskbarItem relatedItem) { super(); diff --git a/src/main/webapp/ResourceManagementPortlet.css b/src/main/webapp/ResourceManagementPortlet.css index e09fe96..d7450dd 100644 --- a/src/main/webapp/ResourceManagementPortlet.css +++ b/src/main/webapp/ResourceManagementPortlet.css @@ -10,7 +10,7 @@ } .iosItem { - color: #4c68a6; + color: #FDFDF6; font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; font-weight: 300; @@ -20,6 +20,7 @@ margin-top: 10px; padding: 5px; width: 120px; + height: 100px; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -239,33 +240,42 @@ background-image: url(images/icons/about.png) !important; } -.resources-icon { - background-image: url(images/icons/world.png) !important; -} - -.wsresources-icon { - background-image: url(images/icons/ws-resource.png) !important; -} - -.ghn-icon { - background-image: url(images/icons/hostingNode.png) !important; -} - .defaultleaf-icon { background-image: url(images/icons/grid.png) !important; } +.resources-icon { + background-image: url(images/icons/world.png) !important; +} + + + /* RESOURCES */ + .collection-icon { - background-image: url(images/icons/collection2.png) !important; + background-image: url(images/resource-icons/violet.png) !important; +} + +.runninginstance-icon { + background-image: url(images/resource-icons/blue.png) !important; } .genericresource-icon { - background-image: url(images/icons/GenericResource.png) !important; + background-image: url(images/resource-icons/green.png) !important; } -.runtimeresource-icon { - background-image: url(images/icons/serviceEndpoint.png) !important; +.ghn-icon { + background-image: url(images/resource-icons/ramarro.png) !important; } +.runtimeresource-icon { + background-image: url(images/resource-icons/yellow.png) !important; +} +.service-icon { + background-image: url(images/resource-icons/orange.png) !important; +} +.wsresources-icon { + background-image: url(images/resource-icons/red.png) !important; +} + /* END RESOURCES */ .pluginCM-icon { background-image: url(images/icons/pluginCM.png) !important; @@ -283,13 +293,7 @@ background-image: url(images/icons/table_multiple.png) !important; } -.runninginstance-icon { - background-image: url(images/icons/gcoreEndpoint.png) !important; -} -.service-icon { - background-image: url(images/icons/software.png) !important; -} .empty-icon { background-image: url(images/icons/error.png) !important; diff --git a/src/main/webapp/conf/resourcemanagement.properties b/src/main/webapp/conf/resourcemanagement.properties index 88eadbd..1c60db9 100644 --- a/src/main/webapp/conf/resourcemanagement.properties +++ b/src/main/webapp/conf/resourcemanagement.properties @@ -2,7 +2,7 @@ # The user and its credentials # Possible values for credentials: # [USER,ADMIN,DEBUG] -USER_CREDENTIALS = ADMIN +USER_CREDENTIALS = DEBUG # Defines the modality in which the portlet is running # possible values [STANDALONE,PORTAL,NOTDEFINED] @@ -11,7 +11,7 @@ RUNNING_MODE = STANDALONE DEFAULT_USER = massimiliano.assante # The scope that will be used as default -DEFAULT_SCOPE =/gcube/devsec +DEFAULT_SCOPE =/gcube # the target of update notification (if in singleton mode) # mails MUST be separated by ; USERMAIL_TO = m.assante@gmail.com diff --git a/src/main/webapp/images/pattern.gif b/src/main/webapp/images/pattern.gif new file mode 100644 index 0000000..1d80567 Binary files /dev/null and b/src/main/webapp/images/pattern.gif differ diff --git a/src/main/webapp/images/resource-icons/blue.png b/src/main/webapp/images/resource-icons/blue.png new file mode 100644 index 0000000..3955611 Binary files /dev/null and b/src/main/webapp/images/resource-icons/blue.png differ diff --git a/src/main/webapp/images/resource-icons/green.png b/src/main/webapp/images/resource-icons/green.png new file mode 100644 index 0000000..d329ef2 Binary files /dev/null and b/src/main/webapp/images/resource-icons/green.png differ diff --git a/src/main/webapp/images/resource-icons/orange.png b/src/main/webapp/images/resource-icons/orange.png new file mode 100644 index 0000000..dbcf728 Binary files /dev/null and b/src/main/webapp/images/resource-icons/orange.png differ diff --git a/src/main/webapp/images/resource-icons/ramarro.png b/src/main/webapp/images/resource-icons/ramarro.png new file mode 100644 index 0000000..ac44153 Binary files /dev/null and b/src/main/webapp/images/resource-icons/ramarro.png differ diff --git a/src/main/webapp/images/resource-icons/red.png b/src/main/webapp/images/resource-icons/red.png new file mode 100644 index 0000000..cbc88da Binary files /dev/null and b/src/main/webapp/images/resource-icons/red.png differ diff --git a/src/main/webapp/images/resource-icons/violet.png b/src/main/webapp/images/resource-icons/violet.png new file mode 100644 index 0000000..0c4ced5 Binary files /dev/null and b/src/main/webapp/images/resource-icons/violet.png differ diff --git a/src/main/webapp/images/resource-icons/yellow.png b/src/main/webapp/images/resource-icons/yellow.png new file mode 100644 index 0000000..a2fdb56 Binary files /dev/null and b/src/main/webapp/images/resource-icons/yellow.png differ