diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..2251ec4 --- /dev/null +++ b/.classpath @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..1965c46 --- /dev/null +++ b/.project @@ -0,0 +1,59 @@ + + + databases-manager-portlet + databases-manager-portlet project + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + com.google.gwt.eclipse.core.gwtNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..ba3c245 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/.settings/com.google.appengine.eclipse.core.prefs b/.settings/com.google.appengine.eclipse.core.prefs new file mode 100644 index 0000000..a60576c --- /dev/null +++ b/.settings/com.google.appengine.eclipse.core.prefs @@ -0,0 +1,3 @@ +#Thu Jun 16 10:18:26 CEST 2011 +eclipse.preferences.version=1 +filesCopiedToWebInfLib= diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs new file mode 100644 index 0000000..f2e1bef --- /dev/null +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +jarsExcludedFromWebInfLib= +lastWarOutDir=/home/loredana/workspace/databases-manager-portlet/target/databases-manager-portlet-1.0.0-SNAPSHOT +warSrcDir=src/main/webapp +warSrcDirIsOutput=false diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 0000000..c803c44 --- /dev/null +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,5 @@ +#Thu Jun 16 11:14:17 CEST 2011 +eclipse.preferences.version=1 +entryPointModules= +filesCopiedToWebInfLib=gwt-servlet.jar +gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBWy13YXIgc3JjL21haW4vd2ViYXBwXV0+PC9leHRyYS1hcmdzPjx2bS1hcmdzPjwhW0NEQVRBWy1YbXg1MTJtXV0+PC92bS1hcmdzPjxlbnRyeS1wb2ludC1tb2R1bGU+Y29tLmNvbXBhbnkuU29tZU1vZHVsZTwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+ diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..22f85c8 --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..4045d87 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 0000000..c74c58e --- /dev/null +++ b/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Thu Sep 02 10:42:12 CEST 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..37c15ff --- /dev/null +++ b/pom.xml @@ -0,0 +1,291 @@ + + + + + + 4.0.0 + + + org.gcube.tools + maven-parent + 1.0.0 + + + + + + + org.gcube.portlets.user + databases-manager-portlet + war + 1.0.0-SNAPSHOT + DatabasesResourceManagerPortlet + Databases Resource Manager Portlet + + + + + distro + UTF-8 + UTF-8 + + 2.5.1 + + ${project.build.directory}/${project.build.finalName} + + + + + + + + org.gcube.applicationsupportlayer + aslcore + + + + org.gcube.data.analysis + statistical-manager-cl + [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT) + + + + org.gcube.core + common-fw-clients + + + + + + + + + + + org.gcube.contentmanagement + storage-manager-wrapper + + + + + org.gcube.contentmanagement + storage-manager-core + + + + + + + + + xalan + xalan + 2.6.0 + + compile + + + + + + + + javax.portlet + portlet-api + + + + org.gcube.portal + custom-portal-handler + + + + org.gcube.core + common-scope + [1.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + compile + + + org.gcube.core + common-scope-maps + [1.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + compile + + + + + + + + + + + + + + + + + + + + + + + + + + com.google.gwt + gwt-servlet + + + + + com.google.gwt + gwt-user + + + + + junit + junit + 4.7 + test + + + javax.validation + validation-api + 1.0.0.GA + test + + + javax.validation + validation-api + 1.0.0.GA + sources + test + + + com.extjs.gxt + gxt + 2.2.5 + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + + + + + ${webappDirectory}/WEB-INF/classes + + + + + + org.codehaus.mojo + gwt-maven-plugin + 2.5.1 + + + + compile + + + + + + DatabasesManager.html + ${webappDirectory} + + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + compile + + exploded + + + + + ${webappDirectory} + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java new file mode 100644 index 0000000..95602ff --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/DatabasesManager.java @@ -0,0 +1,106 @@ +package org.gcube.portlets.user.databasesmanager.client; + +//import org.gcube.portlets.user.dbmanager.client.panels.GxtBorderLayoutPanel; +//import org.gcube.portlets.user.dbmanager.client.utils.ConstantsPortlet; + +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.logical.shared.ResizeEvent; +import com.google.gwt.event.logical.shared.ResizeHandler; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.ServiceDefTarget; +import com.google.gwt.user.client.ui.RootPanel; + +import org.gcube.portlets.user.databasesmanager.client.panels.GxtBorderLayoutPanel; +import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet; + +/** + * Entry point classes define onModuleLoad(). + */ +public class DatabasesManager implements EntryPoint { + + private GxtBorderLayoutPanel borderLayout; + + /** + * This is the entry point method. + */ + + public void onModuleLoad() { + + HandlerManager eventBus = new HandlerManager(this); + + // create the RPC service + + GWTdbManagerServiceAsync service = (GWTdbManagerServiceAsync) GWT + .create(GWTdbManagerService.class); + + ServiceDefTarget serviceDef = (ServiceDefTarget) service; + serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL() + + "dbManagerService"); + + try { + borderLayout = new GxtBorderLayoutPanel(eventBus, service); + + + RootPanel.get(ConstantsPortlet.CONTENTDIV).add(borderLayout); + + Window.addResizeHandler(new ResizeHandler() { +// @Override + public void onResize(ResizeEvent event) { + System.out.println("onWindowResized width: " + + event.getWidth() + " height: " + + event.getHeight()); + updateSize(); + } + }); + + updateSize(); + + } catch (Exception e) { + e.printStackTrace(); + } + + + + } + + /** + * Update window size + */ + public void updateSize() { + + RootPanel rootPanel = RootPanel.get(ConstantsPortlet.CONTENTDIV); + + int topBorder = rootPanel.getAbsoluteTop(); + + int leftBorder = rootPanel.getAbsoluteLeft(); + + int footer = 85; // footer is bottombar + sponsor + + // int rootHeight = (Window.getClientHeight() - topBorder - 4) ;// - + // ((footer == null)?0:(footer.getOffsetHeight()-15)); + + // if (rootHeight > 550) + // rootHeight = 550; + + int rootHeight = (Window.getClientHeight() - topBorder - 4 - footer);// - + // ((footer + // == + // null)?0:(footer.getOffsetHeight()-15)); + + if (rootHeight < 550) + rootHeight = 550; + + int rootWidth = Window.getClientWidth() - 2 * leftBorder; // - + // rightScrollBar; + + System.out.println("New workspace dimension Height: " + rootHeight + + " Width: " + rootWidth); + + borderLayout.setHeight(rootHeight); + borderLayout.setWidth(rootWidth); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java new file mode 100644 index 0000000..418f9e5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java @@ -0,0 +1,39 @@ +package org.gcube.portlets.user.databasesmanager.client; + +import java.util.LinkedHashMap; +import java.util.List; + +import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Row; + +//import org.gcube.portlets.user.dbmanager.client.datamodel.FileModel; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Result; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Row; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +//interface that defines RPC methods +@RemoteServiceRelativePath("dbManagerService") +public interface GWTdbManagerService extends RemoteService { + + List getResource() throws Exception; + + List getTables(LinkedHashMap dataInput) + throws Exception; + + LinkedHashMap getDBInfo(String resourceName) + throws Exception; + + List getDBSchema(LinkedHashMap dataInput) + throws Exception; + + List submitQuery(LinkedHashMap dataDB, + String query, boolean valueReadOnlyQuery, + boolean smartCorrectionQuery, String language) throws Exception; + + List parseCVSString(List result, List attrNames) + throws Exception; + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java new file mode 100644 index 0000000..17efd29 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java @@ -0,0 +1,36 @@ +package org.gcube.portlets.user.databasesmanager.client; + +import java.util.LinkedHashMap; +import java.util.List; + +import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Row; + +//import org.gcube.portlets.user.dbmanager.client.datamodel.FileModel; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Result; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Row; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +public interface GWTdbManagerServiceAsync { + + void getResource(AsyncCallback> asyncCallback); + + void getDBInfo(String resourceName, + AsyncCallback> asyncCallback); + + void getTables(LinkedHashMap dataInput, + AsyncCallback> callback); + + void getDBSchema(LinkedHashMap dataInput, + AsyncCallback> callback); + + void submitQuery(LinkedHashMap dataDB, String query, + boolean valueReadOnlyQuery, boolean smartCorrectionQuery, + String language, AsyncCallback> callback); + + void parseCVSString(List result, List attrNames, + AsyncCallback> callback); + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GreetingService.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GreetingService.java new file mode 100644 index 0000000..2a30017 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GreetingService.java @@ -0,0 +1,12 @@ +//package org.gcube.portlets.user.databasesmanager.client; +// +//import com.google.gwt.user.client.rpc.RemoteService; +//import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; +// +///** +// * The client side stub for the RPC service. +// */ +//@RemoteServiceRelativePath("greet") +//public interface GreetingService extends RemoteService { +// String greetServer(String name) throws IllegalArgumentException; +//} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GreetingServiceAsync.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GreetingServiceAsync.java new file mode 100644 index 0000000..e501f1b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GreetingServiceAsync.java @@ -0,0 +1,40 @@ +//package org.gcube.portlets.user.databasesmanager.client; +// +// +// +//import com.google.gwt.core.client.GWT; +//import com.google.gwt.user.client.rpc.AsyncCallback; +//import com.google.gwt.user.client.rpc.ServiceDefTarget; +// +//public interface GreetingServiceAsync +//{ +// +// /** +// * GWT-RPC service asynchronous (client-side) interface +// * @see org.com.example.TestApp.client.GreetingService +// */ +// void greetServer( java.lang.String name, AsyncCallback callback ); +// +// +// /** +// * Utility class to get the RPC Async interface from client-side code +// */ +// public static final class Util +// { +// private static GreetingServiceAsync instance; +// +// public static final GreetingServiceAsync getInstance() +// { +// if ( instance == null ) +// { +// instance = (GreetingServiceAsync) GWT.create( GreetingService.class ); +// } +// return instance; +// } +// +// private Util() +// { +// // Utility class should not be instanciated +// } +// } +//} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java new file mode 100644 index 0000000..0dd70d4 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java @@ -0,0 +1,129 @@ +package org.gcube.portlets.user.databasesmanager.client.datamodel; + +import java.io.Serializable; +import java.util.List; + +import com.extjs.gxt.ui.client.data.BaseModelData; + +public class FileModel extends BaseModelData implements Serializable { + + private static final long serialVersionUID = 1L; + + private static int ID = 0; + // private int id; + private boolean isExpanded = true; + // private boolean isSchema = false; + private boolean isLoaded = false; + // private boolean isTable = false; + private boolean isDatabase = false; + + + private List DBInfo = null; + private boolean isDBInfoDisplayed = false; + + public FileModel() { + setId(); + // setIsExpanded(true); + // setIsSchema(false); + } + + public FileModel(String name) { + setName(name); + setId(); + + } + + public void setId() { + set("ID", this.ID++); + } + + public int getId() { + return get("ID"); + + } + + public void setName(String name) { + set("name", name); + } + + public String getName() { + return get("name"); + } + + public void setIsExpanded(boolean value) { + + isExpanded = value; + } + + public boolean isExpanded() { + + return isExpanded; + } + + public void setIsLoaded(boolean value) { + + isLoaded = value; + + } + + public boolean isLoaded() { + + return isLoaded; + + } + + public void setIsSchema(boolean value) { + + set("isSchema", value); + } + + public boolean isSchema() { + return get("isSchema"); + } + + public void setIsTable(boolean value) { + + set("isTable", value); + } + + public boolean isTable() { + + return get("isTable"); + } + + public void setIsDatabase(boolean value) { + + isDatabase = value; + } + + public boolean isDatabase() { + + return isDatabase; + } + + public void setDBInfo(List data) { + DBInfo = data; + } + + public List getDBInfo() { + return DBInfo; + } + + public void setIsDBInfoDisplayed(boolean value) { + isDBInfoDisplayed = value; + } + + public boolean isDBInfoDisplayed() { + return isDBInfoDisplayed; + } + + @Override + public boolean equals(Object obj) { + if (obj != null && obj instanceof FileModel) { + FileModel mobj = (FileModel) obj; + return getName().equals(mobj.getName()); + } + return super.equals(obj); + } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Parameter.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Parameter.java new file mode 100644 index 0000000..4d601db --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Parameter.java @@ -0,0 +1,77 @@ +package org.gcube.portlets.user.databasesmanager.client.datamodel; + +import java.io.Serializable; + +public class Parameter implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + private String value; + private String name; + private String paramDescription; + private String objectType; + private String defaultValue; + + public Parameter(String paramName, String paramDescription, + String objectType, String defaultValue) { + + this.setName(paramName); + this.setParamDescription(paramDescription); + this.setObjectType(objectType); + this.setDefaultValue(defaultValue); + + } + + public Parameter() { + // TODO Auto-generated constructor stub + } + + + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getParamDescription() { + return paramDescription; + } + + public void setParamDescription(String paramDescription) { + this.paramDescription = paramDescription; + } + + public void setObjectType(String objectType){ + + this.objectType = objectType; + } + + public String getObjectType(){ + + return objectType; + } + + public void setDefaultValue(String defaultValue){ + + this.defaultValue = defaultValue; + } + + public String getDefaultValue(){ + + return defaultValue; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Result.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Result.java new file mode 100644 index 0000000..225d714 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Result.java @@ -0,0 +1,32 @@ +package org.gcube.portlets.user.databasesmanager.client.datamodel; + + +import java.io.Serializable; + +import com.extjs.gxt.ui.client.data.BaseModelData; + +public class Result extends BaseModelData implements Serializable { + + private static final long serialVersionUID = 1L; + +// private String index; +// private String value; + + public Result() { + } + + public Result(String index, String value) { + set("index", index); + set("value", value); + + } + + public String getValue() { + return get("value"); + } + + public String getIndex() { + return get("index"); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Row.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Row.java new file mode 100644 index 0000000..1b01762 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/Row.java @@ -0,0 +1,121 @@ +package org.gcube.portlets.user.databasesmanager.client.datamodel; + +import java.io.Serializable; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.extjs.gxt.ui.client.data.BaseModelData; + +public class Row extends BaseModelData implements Serializable { + + private static final long serialVersionUID = 1L; + + private static int ID = 0; + + private static Logger rootLogger = Logger.getLogger("Row"); + + // String row; + + // List tokens; + + // public Row(String [] attributes){ + // + // for (int i=0; i attributes) { + // + // for(int i=0;i attributes, List values) { + + set("index", ID++); + +// System.out.println("setting Row value"); + + for (int i = 0; i < attributes.size(); i++) { + + set(attributes.get(i), values.get(i)); + + // System.out.println("attribute: " + attributes.get(i) + " value: " + // + values.get(i)); + + //print check + // rootLogger.log(Level.INFO, "Row-> attribute: " + // +attributes.get(i)+ "value: " + values.get(i)); + + } + + } + + public String getValue(String attribute) { + return get(attribute); + } + + // private static List parseCVSString(String row) throws Exception { + // + // String delimiter = ","; + // + // List elements = new ArrayList(); + // String phrase = row; + // int idxdelim = -1; + // boolean quot = false; + // phrase = phrase.trim(); + // while ((idxdelim = phrase.indexOf(delimiter)) >= 0) { + // quot = phrase.startsWith("\""); + // if (quot) { + // phrase = phrase.substring(1); + // String quoted = ""; + // if (phrase.startsWith("\"")) + // phrase = phrase.substring(1); + // else{ + // RE regexp = new RE("[^\\\\]\""); + // boolean matching = regexp.match(phrase); + // + // if (matching) { + // int i0 = regexp.getParenStart(0); + // quoted = phrase.substring(0, i0 + 1).trim(); + // phrase = phrase.substring(i0 + 2).trim(); + // } + // } + // + // if (phrase.startsWith(delimiter)) + // phrase = phrase.substring(1); + // + // elements.add(quoted); + // + // } else { + // elements.add(phrase.substring(0, idxdelim)); + // phrase = phrase.substring(idxdelim + 1).trim(); + // } + // } + // if (phrase.startsWith("\"")) + // phrase = phrase.substring(1); + // + // if (phrase.endsWith("\"")) + // phrase = phrase.substring(0, phrase.length() - 1); + // + // elements.add(phrase); + // + // return elements; + // } + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/SQLDialect.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/SQLDialect.java new file mode 100644 index 0000000..e7c3229 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/SQLDialect.java @@ -0,0 +1,82 @@ +package org.gcube.portlets.user.databasesmanager.client.datamodel; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet; + + + +import com.extjs.gxt.ui.client.data.BaseModelData; + +public class SQLDialect extends BaseModelData { + + /** + * + */ + +// private String name; + + + public SQLDialect() { + } + + public SQLDialect(String name) { + + setName(name); + } + + public void setName(String name) { + set("name", name); + } + + public String getName() { + + return get("name"); + } + + + public static List loadData(){ + + List dialects = new ArrayList(); + + SQLDialect element1 = new SQLDialect(ConstantsPortlet.NONE); + SQLDialect element2 = new SQLDialect(ConstantsPortlet.POSTGRES); + SQLDialect element3 = new SQLDialect(ConstantsPortlet.MYSQL); + + dialects.add(element1); + dialects.add(element2); + dialects.add(element3); + + return dialects; + +} + + +} + + +//public class SQLDialect { +// +// public SQLDialect() { +// +// } +// +// +// public static List loadData(){ +// +// List dialects = new ArrayList(); +// +// Data element1 = new Data(ConstantsPortlet.NONE); +// Data element2 = new Data(ConstantsPortlet.POSTGRES); +// Data element3 = new Data(ConstantsPortlet.MYSQL); +// +// dialects.add(element1); +// dialects.add(element2); +// dialects.add(element3); +// +// return dialects; +// +// } +// +//} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/SubmitQueryData.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/SubmitQueryData.java new file mode 100644 index 0000000..0ca916b --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/SubmitQueryData.java @@ -0,0 +1,46 @@ +package org.gcube.portlets.user.databasesmanager.client.datamodel; + +public class SubmitQueryData { + + private String query; + private boolean readOnlyQuery; + private boolean smartCorrection; + private String language; + + public SubmitQueryData(){ + + } + + public void setQuery(String value) { + this.query = value; + } + + public void setReadOnlyQuery(boolean value) { + this.readOnlyQuery = value; + } + + public void setSmartCorrection(boolean value) { + this.smartCorrection = value; + } + + public void setLanguage(String value) { + this.language = value; + } + + public String getQuery() { + return this.query; + } + + public boolean getReadOnlyQuery() { + return this.readOnlyQuery; + } + + public boolean getSmartCorrection() { + return this.smartCorrection; + } + + public String getLanguage() { + return this.language; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java new file mode 100644 index 0000000..48ecab9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/EventsTypeEnum.java @@ -0,0 +1,9 @@ +package org.gcube.portlets.user.databasesmanager.client.events; + +public enum EventsTypeEnum { + + SELECTED_ITEM_EVENT, + SUBMIT_QUERY_EVENT, + SHOW_CREATE_TABLE_EVENT; + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/SelectedItemEvent.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/SelectedItemEvent.java new file mode 100644 index 0000000..a98e622 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/SelectedItemEvent.java @@ -0,0 +1,35 @@ +package org.gcube.portlets.user.databasesmanager.client.events; + +//import org.gcube.portlets.user.dbmanager.client.events.interfaces.SelectedItemEventHandler; + +import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SelectedItemEventHandler; + +import com.google.gwt.event.shared.GwtEvent; + +//"SelectedItemEvent" event definition + +public class SelectedItemEvent extends GwtEvent { + + public static Type TYPE = new Type(); + + @Override + public Type getAssociatedType() { + // TODO Auto-generated method stub + return TYPE; + } + + @Override + protected void dispatch(SelectedItemEventHandler handler) { + // TODO Auto-generated method stub + + handler.onSelectedItem(this); + + } + + public EventsTypeEnum getKey() { + + // TODO Auto-generated method stub + return EventsTypeEnum.SELECTED_ITEM_EVENT; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/SubmitQueryEvent.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/SubmitQueryEvent.java new file mode 100644 index 0000000..cce80b7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/SubmitQueryEvent.java @@ -0,0 +1,36 @@ +package org.gcube.portlets.user.databasesmanager.client.events; + + +//import org.gcube.portlets.user.dbmanager.client.events.interfaces.SubmitQueryEventHandler; + +import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SubmitQueryEventHandler; + +import com.google.gwt.event.shared.GwtEvent; + +//"SubmitQueryEvent" event definition + +public class SubmitQueryEvent extends GwtEvent { + + public static Type TYPE = new Type(); + + @Override + public Type getAssociatedType() { + // TODO Auto-generated method stub + return TYPE; + } + + @Override + protected void dispatch(SubmitQueryEventHandler handler) { + // TODO Auto-generated method stub + + handler.onSubmitQuery(this); + + } + + public EventsTypeEnum getKey() { + + // TODO Auto-generated method stub + return EventsTypeEnum.SUBMIT_QUERY_EVENT; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/SelectedItemEventHandler.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/SelectedItemEventHandler.java new file mode 100644 index 0000000..dbb12e5 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/SelectedItemEventHandler.java @@ -0,0 +1,13 @@ +package org.gcube.portlets.user.databasesmanager.client.events.interfaces; + + + +import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent; + +import com.google.gwt.event.shared.EventHandler; + + +// Handler for "SelectedItemEvent" event +public interface SelectedItemEventHandler extends EventHandler { + public void onSelectedItem(SelectedItemEvent selectedItemEvent); +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/SubmitQueryEventHandler.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/SubmitQueryEventHandler.java new file mode 100644 index 0000000..2ceb80d --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/events/interfaces/SubmitQueryEventHandler.java @@ -0,0 +1,12 @@ +package org.gcube.portlets.user.databasesmanager.client.events.interfaces; + + + +import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent; + +import com.google.gwt.event.shared.EventHandler; + +//Handler for "SubmitQueryEvent" event +public interface SubmitQueryEventHandler extends EventHandler { + public void onSubmitQuery(SubmitQueryEvent submitQueryEvent); +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/form/GxtFormSubmitQuery.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/form/GxtFormSubmitQuery.java new file mode 100644 index 0000000..a6f08ca --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/form/GxtFormSubmitQuery.java @@ -0,0 +1,177 @@ +package org.gcube.portlets.user.databasesmanager.client.form; + + + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData; + +//import org.gcube.portlets.user.dbmanager.client.datamodel.SubmitQueryData; + +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.VerticalPanel; +import com.extjs.gxt.ui.client.widget.form.CheckBox; +import com.extjs.gxt.ui.client.widget.form.FormPanel; +import com.extjs.gxt.ui.client.widget.form.TextField; +import com.extjs.gxt.ui.client.widget.layout.FormData; + +public class GxtFormSubmitQuery extends LayoutContainer { + + private VerticalPanel vp; + FormPanel form; + private FormData formData; + + // private SubmitQueryData data; + + // private boolean ReadOnlyQuery; + // private boolean SmartCorrection; + + private static Logger rootLogger = Logger.getLogger("GxtFormSubmitQuery"); + + + + public GxtFormSubmitQuery() { + + formData = new FormData("-20"); + vp = new VerticalPanel(); + + vp.setSpacing(10); + + createLayout(); + + add(vp); + + } + + private void createLayout() { + + // FormPanel form = new FormPanel(); + + form = new FormPanel(); + + // form.setHeading("Submit Query"); + form.setHeaderVisible(false); + form.setFrame(true); + form.setWidth(250); +// form.setWidth(350); + // form.setHeight(250); + + // Query field + TextField query = new TextField(); + query.setFieldLabel("Query"); + +// query.setHeight(50); +// query.setWidth(50); + // query.setAllowBlank(false); + query.getFocusSupport().setPreviousId(form.getButtonBar().getId()); + form.add(query, formData); + + // Read-Only button + // CheckBoxGroup readOnlyQuery = new CheckBoxGroup(); + // readOnlyQuery.setFieldLabel("Read Only Query"); + +// CheckBox checkRO = new CheckBox(); +// checkRO.setFieldLabel("Read Only Query"); +// checkRO.setValue(true); +// // readOnlyQuery.add(checkRO); +// // form.add(readOnlyQuery, formData); +// form.add(checkRO, formData); + + // Smart Correction button + // CheckBoxGroup smartCorrection = new CheckBoxGroup(); + // smartCorrection.setFieldLabel("Apply Smart Correction"); + + CheckBox checkSC = new CheckBox(); + checkSC.setFieldLabel("Apply Smart Corrections"); + checkSC.setValue(true); + // smartCorrection.add(checkSC); + // form.add(smartCorrection, formData); + form.add(checkSC, formData); + +// // SQL Dialect ComboBox +// +// ListStore store = new ListStore(); +// List elements = new ArrayList(); +// +// // load data to display in comboBox +// elements = SQLDialect.loadData(); +// store.add(elements); +// +// ComboBox combo = new ComboBox(); +// combo.setFieldLabel("Language"); +// combo.setDisplayField("name"); +// combo.setTriggerAction(TriggerAction.ALL); +// combo.setValue(store.getAt(0)); +// combo.setStore(store); +// form.add(combo, formData); + + vp.add(form); + + } + + private String getQuery() { + + String query = ((TextField) form.getWidget(0)).getValue(); + +// System.out.println("GxtFormSubmitQuery->query: " + query); + + rootLogger.log(Level.SEVERE, "query: " + query); + + return query; + } + +// private boolean getReadOnlyQueryValue() { +// +// CheckBox checkRO = ((CheckBox) form.getWidget(1)); +// +// System.out.println("GxtFormSubmitQuery->readonlyquery: " +// + checkRO.getValue()); +// return (checkRO.getValue()); +// +// } + + private boolean getSmartCorrectionValue() { + +// CheckBox checkSC = ((CheckBox) form.getWidget(2)); + CheckBox checkSC = ((CheckBox) form.getWidget(1)); + +// System.out.println("GxtFormSubmitQuery->smartcorrection: " +// + checkSC.getValue()); + + rootLogger.log(Level.SEVERE, "smartcorrection: " + checkSC.getValue()); + + return (checkSC.getValue()); + + } + +// private String getLanguage() { +// +// ComboBox combo = ((ComboBox) form.getWidget(3)); +// SQLDialect item = combo.getValue(); +// +// System.out.println("GxtFormSubmitQuery->language: " + item.getName()); +// +// return item.getName(); +// } + + public SubmitQueryData getSubmitQueryData() { + + layout(true); + + SubmitQueryData data = new SubmitQueryData(); + + data.setQuery(this.getQuery()); + + //TO REMOVE +// data.setReadOnlyQuery(this.getReadOnlyQueryValue()); + + data.setSmartCorrection(this.getSmartCorrectionValue()); + + //TO REMOVE +// data.setLanguage(this.getLanguage()); + + return data; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java new file mode 100644 index 0000000..c38aafa --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java @@ -0,0 +1,738 @@ +package org.gcube.portlets.user.databasesmanager.client.panels; + + + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerServiceAsync; +import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Row; +import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData; +import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent; +import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent; +import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SelectedItemEventHandler; +import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SubmitQueryEventHandler; +import org.gcube.portlets.user.databasesmanager.client.toolbar.GxtToolbarFunctionality; +import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet; + +//import org.gcube.portlets.user.dbmanager.client.GWTdbManagerServiceAsync; +//import org.gcube.portlets.user.dbmanager.client.datamodel.FileModel; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Result; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Row; +//import org.gcube.portlets.user.dbmanager.client.datamodel.SubmitQueryData; +//import org.gcube.portlets.user.dbmanager.client.events.SelectedItemEvent; +//import org.gcube.portlets.user.dbmanager.client.events.SubmitQueryEvent; +//import org.gcube.portlets.user.dbmanager.client.events.interfaces.SelectedItemEventHandler; +//import org.gcube.portlets.user.dbmanager.client.events.interfaces.SubmitQueryEventHandler; +//import org.gcube.portlets.user.dbmanager.client.toolbar.GxtToolbarFunctionality; +//import org.gcube.portlets.user.dbmanager.client.utils.ConstantsPortlet; + +import com.extjs.gxt.ui.client.Style.LayoutRegion; +import com.extjs.gxt.ui.client.Style.Scroll; +import com.extjs.gxt.ui.client.store.ListStore; +import com.extjs.gxt.ui.client.util.Margins; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.MessageBox; +import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; +import com.extjs.gxt.ui.client.widget.grid.ColumnModel; +import com.extjs.gxt.ui.client.widget.grid.Grid; +import com.extjs.gxt.ui.client.widget.layout.BorderLayout; +import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; +import com.extjs.gxt.ui.client.widget.layout.RowData; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.MessageBoxEvent; +import com.extjs.gxt.ui.client.widget.button.Button; + +public class GxtBorderLayoutPanel extends ContentPanel { + + /* Create Root Logger */ + private static Logger rootLogger = Logger.getLogger("GxtBorderLayoutPanel"); + + private ContentPanel north; + private ContentPanel west; + private LayoutContainer center; + private ContentPanel centerUpper; + private ContentPanel centerBottom; + private GxtTreePanel treePanel; + private GxtToolbarFunctionality toolbar; + private ArrayList parsedList; + + private List listAttributes; + private List rows; + + private HandlerManager eventBus = null; + + // RPC service + private GWTdbManagerServiceAsync RPCservice = null; + + public GxtBorderLayoutPanel(HandlerManager eBus, + GWTdbManagerServiceAsync service) throws Exception { + + eventBus = eBus; + RPCservice = service; + + north = new ContentPanel(); + west = new ContentPanel(); + center = new LayoutContainer(); + treePanel = new GxtTreePanel(eventBus, service); + toolbar = new GxtToolbarFunctionality(eventBus, RPCservice); + + initLayout(); + createLayouts(); + + addHandler(); + + } + + private void initLayout() { + + north.setLayout(new FitLayout()); + north.setTopComponent(toolbar.getToolBar()); + north.add(toolbar.getToolBar()); + + west.setLayout(new FitLayout()); + west.setHeading("Databases Resources"); + + west.add(treePanel); + west.setScrollMode(Scroll.AUTO); + + center.setLayout(new BorderLayout()); + + } + + public void createLayouts() { + + // Border layout for the external container + final BorderLayout borderLayoutNordWest = new BorderLayout(); + setLayout(borderLayoutNordWest); + + // NORD + BorderLayoutData northData = new BorderLayoutData(LayoutRegion.NORTH, + 55, 55, 70); + + northData.setSplit(false); // Split bar between regions + // northData.setFloatable(true); + // northData.setCollapsible(true); + // northData.setHideCollapseTool(false); + // northData.setSplit(true); + northData.setMargins(new Margins(0, 0, 1, 0)); + + // WEST + BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, + 330, 330, 400); + westData.setSplit(true); + westData.setCollapsible(true); + westData.setMargins(new Margins(0, 1, 0, 0)); + + // CENTER + + BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); + centerData.setMargins(new Margins(0)); + // center.setHeading("Information"); + centerData.setSplit(true); + centerData.setCollapsible(true); + + // CENTER UPPER + + centerUpper = new ContentPanel(); + centerUpper.setLayout(new FitLayout()); + centerUpper.setHeading("Database Information"); + centerUpper.setScrollMode(Scroll.NONE); + + // CENTER BOTTOM + + centerBottom = new ContentPanel(); + centerBottom.setLayout(new FitLayout()); + centerBottom.setHeading("Information Details"); + centerBottom.setScrollMode(Scroll.AUTO); + + BorderLayoutData centerUpperData = new BorderLayoutData( + LayoutRegion.NORTH, 250, 100, 250); + + centerUpperData.setSplit(true); // Split bar between regions + // northData.setFloatable(true); + centerUpperData.setCollapsible(false); + // northData.setHideCollapseTool(false); + // northData.setSplit(true); + centerUpperData.setMargins(new Margins(0, 0, 1, 0)); + + // BorderLayoutData centerBottomData = new + // BorderLayoutData(LayoutRegion.CENTER, + // 50, 30, 50); + + BorderLayoutData centerBottomData = new BorderLayoutData( + LayoutRegion.CENTER); + centerBottomData.setSplit(true); + centerBottomData.setCollapsible(false); + centerBottomData.setMargins(new Margins(0)); + // centerBottomData.setMargins(new Margins(1, 0, 0, 0)); + + // to add the central panels to the second container + center.add(centerUpper, centerUpperData); + center.add(centerBottom, centerBottomData); + + add(north, northData); + add(west, westData); + add(center, centerData); + // add(east, eastData); + + } + + private void addHandler() { + + eventBus.addHandler(SelectedItemEvent.TYPE, + new SelectedItemEventHandler() { + + public void onSelectedItem( + SelectedItemEvent selectedItemEvent) { + +// System.out +// .println("GxtBorderLayoutPanel: Event received"); + + rootLogger.log(Level.SEVERE, "Event received"); + + int DepthSelectedItem = treePanel + .getTreeDepthSelectedItem(); + +// System.out.println("GxtBorderLayoutPanel-> Depth: " +// + DepthSelectedItem); + + // element name selected + String text = treePanel.getValue(); + +// System.out +// .println("GxtBorderLayoutPanel-> item selected: " +// + text); + + rootLogger.log(Level.INFO, "item selected: " + text); + + toolbar.disableButtonOnToolbar(DepthSelectedItem, + treePanel.getSelectedItemIsSchema()); + + if (DepthSelectedItem != 3) { + + centerUpper.removeAll(); + + centerUpper.layout(true); + + } + + List data = treePanel.getTreePanel() + .getSelectionModel().getSelectedItems(); + + FileModel selectedItem = data.get(0); + + if (DepthSelectedItem == 3) { // the item selected is a + // database. + + // show database information in the panel + +// List data = treePanel.getTreePanel() +// .getSelectionModel().getSelectedItems(); +// FileModel selectedItem = data.get(0); + + FileModel parent = treePanel.getTreeStore() + .getParent(selectedItem); + + // displayDBInfo(parent); + + // display information about the selected database + displayDBInfo(data.get(0)); + + } + + //display the table name in the right panel when a table is selected + + if (DepthSelectedItem == 5){ + + centerUpper.removeAll(); + + centerUpper.addText(data.get(0).getName()); + + centerUpper.layout(true); + + } + + if ((DepthSelectedItem == 4) && (data.get(0).isSchema() == false)){ + + centerUpper.removeAll(); + + centerUpper.addText(data.get(0).getName()); + + centerUpper.layout(true); + + } + +// System.out +// .println("GxtBorderLayoutPanel: Event finished"); + + rootLogger.log(Level.SEVERE, "Event finished"); + + } + + }); + + eventBus.addHandler(SubmitQueryEvent.TYPE, + new SubmitQueryEventHandler() { + + @Override + public void onSubmitQuery(SubmitQueryEvent submitQueryEvent) { + // TODO Auto-generated method stub + + try { + submitQuery(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }); + + } + + private void submitQuery() throws Exception { + +// System.out.println("Start RPC - submitQuery"); + + rootLogger.log(Level.SEVERE, "Start RPC - submitQuery"); + + // recover input data + + LinkedHashMap dataDB = treePanel + .getInfoOnSelectedItem(); + + final SubmitQueryData dataQuery = toolbar.getSubmitQueryData(); + + // RPCservice.submitQuery(dataDB, dataQuery.getQuery(), + // dataQuery.getReadOnlyQuery(), dataQuery.getSmartCorrection(), + // dataQuery.getLanguage(), new AsyncCallback>() { + + // force the "true" value for the readonly input. + + // determine the language + List data = treePanel.getTreePanel().getSelectionModel() + .getSelectedItems(); + FileModel selectedItem = data.get(0); + + String dialect; + + if (selectedItem.isDatabase()) { // the selected item is a database + +// System.out.println("the selected item is a database"); + rootLogger.log(Level.INFO, "the selected item is a database"); + + // determine the dialect recovering the dialect + dialect = selectedItem.getDBInfo().get(2).getValue(); + + rootLogger.log(Level.INFO, "determined Dialect for smart correction: " + dialect); + + } else { + FileModel parent1 = treePanel.getTreeStore() + .getParent(selectedItem); + + if (parent1.isDatabase()) { // the selected item is a schema + +// System.out.println("the selected item is a schema"); + + rootLogger.log(Level.INFO, "the selected item is a schema"); + + // determine the dialect recovering the dialect + dialect = parent1.getDBInfo().get(2).getValue(); + + rootLogger.log(Level.INFO, "determined Dialect for smart correction: " + dialect); + + } + + else { // the selected item is a table + +// System.out.println("the selected item is a table"); + + rootLogger.log(Level.INFO, "the selected item is a table"); + + FileModel parent2 = treePanel.getTreeStore().getParent(parent1); + + // determine the dialect recovering the dialect + dialect = parent2.getDBInfo().get(2).getValue(); + + rootLogger.log(Level.INFO, "determined Dialect for smart correction: " + dialect); + + } + + } + + String language = ConstantsPortlet.NONE; + + if (dialect.toUpperCase().contains(ConstantsPortlet.POSTGRES)) { + + language = ConstantsPortlet.POSTGRES; + } + + if (dialect.toUpperCase().contains(ConstantsPortlet.MYSQL)) { + + language = ConstantsPortlet.MYSQL; + } + + rootLogger.log(Level.INFO, "Dialect used for smart correction: " + language); + + RPCservice.submitQuery(dataDB, dataQuery.getQuery(), true, + dataQuery.getSmartCorrection(), language, + new AsyncCallback>() { + + // // TO REMOVE data "true" and "POSTGRES" + // RPCservice.submitQuery(dataDB, dataQuery.getQuery(), + // true, + // dataQuery.getSmartCorrection(), "POSTGRES", + // new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + +// Window.alert(caught.getMessage()); + +// System.out.println("FAILURE submitQuery"); + + rootLogger.log(Level.SEVERE, "FAILURE RPC submitQuery"); + + Listener l = new Listener() { + public void handleEvent(MessageBoxEvent ce) { +// Button btn = ce.getButtonClicked(); +// Info.display("MessageBox", "The '{0}' button was pressed", btn.getHtml()); + +// Button btn = ce.getButtonClicked(); + + Dialog form = toolbar.getDialogForm(); + + if (form.isMasked()) + form.unmask(); + + + + } + }; + +// MessageBox.alert("Error ","
Cause:"+caught.getCause()+"
Message:"+caught.getMessage(), l); + MessageBox.alert("Error ","
Message:"+caught.getMessage(), l); + + + } + + @Override + public void onSuccess(List result) { + // TODO Auto-generated method stub + +// System.out.println("SUCCESS submitQuery"); + + rootLogger.log(Level.SEVERE, "SUCCESS RPC submitQuery"); + + rows = new ArrayList(); + + +// System.out.println("result size: " + result.size()); + + rootLogger.log(Level.SEVERE, "output size: " + result.size()); + + // recover query + // Result query = result.remove(0); + + + // recover converted query + Result convertedQuery; + + if (dataQuery.getSmartCorrection() == true) { + + result.remove(0); + // convertedQuery = result.get(1); + + } + + // get the attributes list for the result table + getListAttributes(result.get(0).getValue()); + + // remove the header in order to parse only the result + result.remove(0); + + //parse the result in order to obtain a table + parseResult(result); + + } + + }); + + } + + // start the parsing of the submit result in order to obtain a table + private void parseResult(List result) { + + RPCservice.parseCVSString(result, listAttributes, + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + + Window.alert(caught.getMessage()); +// System.out.println("FAILURE StartParse"); + + rootLogger.log(Level.SEVERE, "FAILURE RPC parseResult"); + + } + + @Override + public void onSuccess(List rows) { + +// System.out.println("Success StartParse"); + + rootLogger.log(Level.SEVERE, "SUCCESS RPC parseResult"); + + if (rows != null) { + + Dialog form = toolbar.getDialogForm(); + + if (form.isMasked()) + form.unmask(); + + + form.hide(); + + + + // Display the submit query result as a table + Dialog submitResult = new Dialog(); + submitResult.setLayout(new FitLayout()); + submitResult.setHeading("Result"); + + submitResult.setResizable(false); + // submitResult.setHeading("Submit Query"); + // submitResult.setWidth(290); + // submitResult.setHeight(250); + + submitResult.setModal(true); + submitResult.setBlinkModal(true); + + // submitResult.setBodyStyle("padding:9px;"); + submitResult.setSize(600, 400); + // submitResult.setScrollMode(Scroll.AUTO); + submitResult.setScrollMode(Scroll.NONE); + submitResult.setHideOnButtonClick(true); + + submitResult.setMaximizable(true); + // submitResult.addText("Result Table"); + + ListStore store = new ListStore(); + store.add(rows); + + Grid grid; + + grid = new Grid(store, createColumnModel()); + + // grid.setAutoExpandColumn("value"); + grid.setBorders(true); + + // grid.setAutoWidth(true); + + RowData data = new RowData(.5, 1); + data.setMargins(new Margins(6)); + + submitResult.add(grid, data); + + submitResult.show(); + + } + } + + }); + + } + + // private void updateListRow(Row row){ + // + // + // + // rows.add(row); + // + // System.out.println("CHECK size2: " + rows.size()); + // + // + // } + + // private void returnParsedeList(List result) { + // + // parsedList = new ArrayList(); + // for (String s : result) { + // + // System.out.println("value: " + result); + // parsedList.add(s); + // } + // + // System.out.println("size row1: " + result.size()); + // + // } + + private void getListAttributes(String value) { + + // recover attribute fields fo the result table + String headers = value; + +// System.out.println("headers: " + headers); + + rootLogger.log(Level.INFO, "Headers fields table: " + headers); + + listAttributes = parseAttributesTableResult(headers); + + + +// System.out.println("attributes number: " + listAttributes.size()); + + rootLogger.log(Level.INFO, "attributes number: " + listAttributes.size()); + + rootLogger.log(Level.INFO, "attributes list: "); + + for (int i = 0; i < listAttributes.size(); i++) { + +// System.out.println(listAttributes.get(i)); + + rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); + + } + + } + + private ColumnModel createColumnModel() { + + List configs = new ArrayList(); + ColumnConfig column; + + column = new ColumnConfig(); + + column.setId("index"); + column.setHeader("Index"); + column.setWidth(100); + column.setSortable(false); + + configs.add(column); + + for (int i = 0; i < listAttributes.size(); i++) { + +// System.out.println("attribute: " + listAttributes.get(i)); + rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); + column = new ColumnConfig(); + column.setId(listAttributes.get(i)); + // column.setId("\"" + fields.get(i) + "\""); + column.setHeader(listAttributes.get(i)); + column.setWidth(100); + column.setSortable(false); + + configs.add(column); + + } + + return new ColumnModel(configs); + } + + // private String[] parseAttributesTableResult(String value) { + // + // System.out.println("parsing attributes table"); + // + // String todelete = "[,]"; + // + // value = value.replaceAll(todelete, " "); + // value = value.replaceAll("[ ]+", " "); + // + // String[] tokens = value.split("[ ]"); + // return tokens; + // + // } + + private List parseAttributesTableResult(String phrase) { + + String delimiter = ","; + List elements = new ArrayList(); + int idxdelim = -1; + phrase = phrase.trim(); + + while ((idxdelim = phrase.indexOf(delimiter)) >= 0) { + + elements.add(phrase.substring(0, idxdelim)); + phrase = phrase.substring(idxdelim + 1).trim(); + + } + + elements.add(phrase); + return elements; + + } + + private ColumnModel createColumnModelForDBInfo(List result) { + List configs = new ArrayList(); + + ColumnConfig column = new ColumnConfig(); + column.setId("index"); + column.setHeader("Property"); + column.setWidth(100); + column.setSortable(false); + + configs.add(column); + + column = new ColumnConfig(); + column.setId("value"); + column.setHeader("Value"); + column.setWidth(600); + + column.setSortable(false); + + configs.add(column); + + ListStore store = new ListStore(); + store.add(result); + + return new ColumnModel(configs); + } + + private void displayDBInfo(FileModel element) { + +// System.out.println("GxtBorderLayout->displaying info"); + + rootLogger.log(Level.INFO, "displaying info"); + + // LinkedHashMap data = element.getDBInfo(); + + List dataDB = element.getDBInfo(); + +// System.out.println("GxtBorderLayout->size info: " + dataDB.size()); + + rootLogger.log(Level.INFO, "info size: " + dataDB.size()); + + ListStore store = new ListStore(); + store.add(dataDB); + + Grid grid = new Grid(store, + createColumnModelForDBInfo(dataDB)); + + // grid.setAutoExpandColumn("name"); + grid.setBorders(true); + + // grid.setAutoWidth(true); + + RowData data = new RowData(.5, 1); + data.setMargins(new Margins(6)); + + centerUpper.removeAll(); + + centerUpper.add(grid, data); + centerUpper.layout(true); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java new file mode 100644 index 0000000..1482b59 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java @@ -0,0 +1,838 @@ +package org.gcube.portlets.user.databasesmanager.client.panels; + + + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerServiceAsync; +import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; +import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent; + +//import org.gcube.portlets.user.dbmanager.client.GWTdbManagerServiceAsync; +//import org.gcube.portlets.user.dbmanager.client.datamodel.FileModel; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Result; +//import org.gcube.portlets.user.dbmanager.client.events.SelectedItemEvent; + +import com.extjs.gxt.ui.client.Style.SelectionMode; +import com.extjs.gxt.ui.client.event.ComponentEvent; +import com.extjs.gxt.ui.client.event.EventType; +import com.extjs.gxt.ui.client.event.SelectionChangedEvent; +import com.extjs.gxt.ui.client.event.SelectionChangedListener; +import com.extjs.gxt.ui.client.event.TreePanelEvent; +import com.extjs.gxt.ui.client.store.TreeStore; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.layout.FlowData; +import com.extjs.gxt.ui.client.widget.layout.FlowLayout; +import com.extjs.gxt.ui.client.widget.treepanel.TreePanel; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; + +public class GxtTreePanel extends LayoutContainer { + + private TreeStore store; + private TreePanel treePanel; + + private HandlerManager eventBus = null; + + private String value = ""; + private int treeDepthSelectedItem; + private boolean SelectedItemIsSchema = false; + private GWTdbManagerServiceAsync RPCservice = null; + + private LinkedHashMap dataDBInfo = null; + + private String ResourceNameSelected; + private String DatabaseNameSelected; + private String SchemaNameSelected; + private String TableNameSelected; + + private LinkedHashMap infoOnSelectedItem; + + private static Logger rootLogger = Logger.getLogger("GxtTreePanel"); + + public GxtTreePanel(HandlerManager eBus, GWTdbManagerServiceAsync service) + throws Exception { + + RPCservice = service; + + eventBus = eBus; + + store = new TreeStore(); + + this.initLayout(); + + } + + private void initLayout() throws Exception { + + setLayout(new FlowLayout(10)); + + treePanel = new TreePanel(store) { + + @Override + public boolean hasChildren(FileModel parent) { + if (parent.isExpanded() == true) { + return true; + } else { + return false; + } + } + + public void onComponentEvent(ComponentEvent ce) { + super.onComponentEvent(ce); + + TreePanelEvent tpe = (TreePanelEvent) ce; + EventType typeEvent = tpe.getType(); + + int type = ce.getEventTypeInt(); + switch (type) { + case Event.ONCLICK: + onRightClick(tpe); + break; + // case Event.ONDBLCLICK: + // onDoubleClick(tpe); + // break; + // case Event.ONSCROLL: + // onScroll(tpe); + // break; + // case Event.ONFOCUS: + // onFocus(ce); + // break; + } + + } + + }; + + treePanel.setDisplayProperty("name"); + + // load the root + loadRootItemTree(); + + // Single selection Mode + treePanel.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + + // select root item + treePanel.getSelectionModel().select(store.getRootItems().get(0), true); + + // expand level 1 + treePanel.setExpanded(store.getRootItems().get(0), true); + + add(treePanel, new FlowData(10)); + + addListeners(); + + } + + // private void createLayout() { + // + // // Folder model = getTreeModel(); + // + // } + + private void addListeners() { + + treePanel.getSelectionModel().addSelectionChangedListener( + new SelectionChangedListener() { + + @Override + public void selectionChanged( + SelectionChangedEvent se) { + +// System.out.println("SelectionChangedListener"); + + dataDBInfo = null; + + ResourceNameSelected = null; + DatabaseNameSelected = null; + SchemaNameSelected = null; + TableNameSelected = null; + + infoOnSelectedItem = null; + + SelectedItemIsSchema = false; + + // the selected element + List data = treePanel.getSelectionModel() + .getSelectedItems(); + + treePanel.setExpanded(data.get(0), true); // expand + // level of + // the + // element + // selected + + value = data.get(0).get("name"); + +// System.out.println("GxtTreePanel Value: " +// + data.get(0).get("name")); + + rootLogger.log(Level.INFO, "GxtTreePanel-> selectedItem value: " + value); + +// System.out.println("GxtTreePanel Depth: " +// + store.getDepth(data.get(0))); + + treeDepthSelectedItem = store.getDepth(data.get(0)); + +// rootLogger.log(Level.INFO, "GxtTreePanel-> selectedItem level depth: " + treeDepthSelectedItem); + + rootLogger.log(Level.INFO, "selectedItem level depth: " + treeDepthSelectedItem); + + int numChildrenFolder = store.getChildCount(data.get(0)); + + // recover the appropriate information whenever an + // element is selected + + setInfoOnSelectedItem(data.get(0)); + + if ((numChildrenFolder == 0) + && (data.get(0).isLoaded() != true)) { + treePanel.mask("Loading", "x-mask-loading"); + + switch (treeDepthSelectedItem) { + // case 1: + // + // loadResources(data.get(0)); + // break; + + case 2: + loadDBInfo(data.get(0)); + break; + + case 3: + loadSchema(data.get(0)); + break; + + case 4: + loadTables(data.get(0)); + break; + + } + } + + // fire event + eventBus.fireEvent(new SelectedItemEvent()); + + } + }); + + } + + private void loadRootItemTree() throws Exception { + +// treePanel.mask("Loading", "x-mask-loading"); + + this.mask("Loading", "x-mask-loading"); + + + final FileModel root = new FileModel("Resources"); + store.insert(root, 0, true); + + // store.add(root, true); + + loadResources(root, this); + + } + + public String getValue() { + + return value; + + } + + public int getTreeDepthSelectedItem() { + + return treeDepthSelectedItem; + } + + private void loadResources(final FileModel element, final GxtTreePanel tree) { + +// System.out.println("Start RPC - getResources"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> Start RPC - getResource"); + rootLogger.log(Level.SEVERE, "Start RPC - getResource"); + + // call remote service + + RPCservice.getResource(new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + + Window.alert(caught.getMessage()); +// System.out.println("FAILURE"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> FAILURE RPC getResource"); + + rootLogger.log(Level.SEVERE, "FAILURE RPC getResource"); + + } + + @Override + public void onSuccess(List result) { + + if (tree.isMasked()) + tree.unmask(); + +// if (treePanel.isMasked()) +// treePanel.unmask(); + +// System.out.println("SUCCESS"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> SUCCESS RPC getResource"); + + rootLogger.log(Level.SEVERE, "SUCCESS RPC getResource"); + + // print check + for (int i = 0; i < result.size(); i++) { + +// System.out.println(result.get(i).getName()); + +// rootLogger.log(Level.INFO, "GxtTreePanel-> Resource: " + result.get(i).getName()); + + rootLogger.log(Level.INFO, "Resource: " + result.get(i).getName()); + + } + + // int numChildrenFolder = store.getChildCount(element); + + addChildren(element, result); + + element.setIsLoaded(true); + + } + + }); + +// System.out.println("End RPC - getResources"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> End RPC - getResource"); + + rootLogger.log(Level.SEVERE, "End RPC - getResource"); + } + + private void loadDBInfo(final FileModel element) { + +// System.out.println("Start RPC - getDBInfo"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> Start RPC - getDBInfo"); + + rootLogger.log(Level.SEVERE, "Start RPC - getDBInfo"); + + + // call remote service + + RPCservice.getDBInfo(element.getName(), + new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + + Window.alert(caught.getMessage()); +// System.out.println("FAILURE"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> FAILURE RPC getDBInfo"); + + rootLogger.log(Level.SEVERE, "FAILURE RPC getDBInfo"); + + } + + @Override + public void onSuccess( + LinkedHashMap result) { + + if (treePanel.isMasked()) + treePanel.unmask(); + +// System.out.println("SUCCESS"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> SUCCESS RPC getDBInfo"); + + rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBInfo"); + + if (result.size() != 0) { + + // recover keys from the result + + Set keys = result.keySet(); + + Object[] array = keys.toArray(); + +// System.out.println("array size: " + array.length); + + // recover information for each database + + List children = new ArrayList(); + int numIterations = (result.size()) / 5; + + int i = 0; + int j = 0; + for (i = 0; i < numIterations; i++) { + + // System.out.println("index i: " + i); + + String DBName = null; + List DBInfo = new ArrayList(); + + for (j = (i * 5); j < (i + 1) * 5; j++) { + + // System.out.println("index j: " + j); + + if (array[j].toString().contains( + "Database Name")) { + + // recover the database name + DBName = result + .get(array[j].toString()) + .getName(); + + Result row = new Result( + "Database Name", result.get( + array[j].toString()) + .getName()); + DBInfo.add(row); + + } + + if (array[j].toString().contains("URL")) { + Result row = new Result("URL", result + .get(array[j].toString()) + .getName()); + DBInfo.add(row); + } + + if (array[j].toString().contains( + "Driver Name")) { + + Result row = new Result("Driver Name", + result.get(array[j].toString()) + .getName()); + DBInfo.add(row); + + } + + if (array[j].toString().contains( + "Dialect Name")) { + + Result row = new Result("Dialect Name", + result.get(array[j].toString()) + .getName()); + DBInfo.add(row); + + } + + if (array[j].toString().contains( + "Platform Name")) { + + Result row = new Result( + "Platform Name", result.get( + array[j].toString()) + .getName()); + DBInfo.add(row); + + } + + } + + FileModel child = new FileModel(DBName); + + child.setIsDatabase(true); + + child.setDBInfo(DBInfo); + + children.add(child); + + } + + addChildren(element, children); + + } + +// System.out.println("children number: " +// + store.getChildCount(element)); + +// rootLogger.log(Level.INFO, "GxtTreePanel-> children number: " + store.getChildCount(element)); + + rootLogger.log(Level.INFO, "children number: " + store.getChildCount(element)); + + element.setIsLoaded(true); + + // // fire event + // eventBus.fireEvent(new DisplayDBInfoEvent()); + + } + + }); + +// System.out.println("End RPC - getDBInfo"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> End RPC - getDBInfo"); + + rootLogger.log(Level.SEVERE, "End RPC - getDBInfo"); + + } + + private void loadSchema(final FileModel element) { + +// System.out.println("Start RPC - getSchema"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> Start RPC - getDBSchema"); + + rootLogger.log(Level.SEVERE, "Start RPC - getDBSchema"); + + // recover data inputs + + LinkedHashMap dataInput = new LinkedHashMap(); + + FileModel parent = store.getParent(element); + + dataInput.put("ResourceName", parent.getName()); + dataInput.put("DatabaseName", element.getName()); + + // call remote service + + RPCservice.getDBSchema(dataInput, new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); +// System.out.println("FAILURE"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> FAILURE RPC getDBSchema"); + + rootLogger.log(Level.SEVERE, "FAILURE RPC getDBSchema"); + + } + + @Override + public void onSuccess(List result) { + + if (treePanel.isMasked()) + treePanel.unmask(); + +// System.out.println("SUCCESS"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> SUCCESS RPC getDBSchema"); + + rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBSchema"); + + + if (result.size() == 0) { // the database has not schema + + loadTables(element); + + } else { + + // // print check + // for (int i = 0; i < result.size(); i++) { + // System.out.println(result.get(i).getName()); + // + // } + + // int numChildrenFolder = store.getChildCount(element); + + // if (numChildrenFolder == 0) { + + addChildren(element, result); + + element.setIsLoaded(true); + + // } + } + + } + }); + +// System.out.println("End RPC - getSchema"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> End RPC - getDBSchema"); + + rootLogger.log(Level.SEVERE, "End RPC - getDBSchema"); + + } + + private void loadTables(final FileModel element) { + +// System.out.println("Start RPC - getTables"); + +// rootLogger.log(Level.SEVERE, "GxtTreePanel-> Start RPC - getTables"); + + rootLogger.log(Level.SEVERE, "Start RPC - getTables"); + + // recover data inputs + + LinkedHashMap dataInput = new LinkedHashMap(); + + FileModel parent = store.getParent(element); + FileModel parent1 = store.getParent(parent); + + dataInput.put("ResourceName", parent1.getName()); + dataInput.put("DatabaseName", parent.getName()); + dataInput.put("SchemaName", element.getName()); + + rootLogger.log(Level.INFO, "ResourceName: " + parent1.getName()); + rootLogger.log(Level.INFO, "DatabaseName: " + parent.getName()); + rootLogger.log(Level.INFO, "SchemaName: " + element.getName()); + +// System.out.println(parent1.getName()); +// System.out.println(parent.getName()); +// System.out.println(element.getName()); + + // call remote service + + RPCservice.getTables(dataInput, new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); +// System.out.println("FAILURE"); + rootLogger.log(Level.SEVERE, "FAILURE RPC getTables"); + + } + + @Override + public void onSuccess(List result) { + + if (treePanel.isMasked()) + treePanel.unmask(); + +// System.out.println("SUCCESS"); + + rootLogger.log(Level.SEVERE, "SUCCESS RPC getTables"); + + if (result.size() == 0) { // the database has not tables + +// System.out.println("the database has not tables"); + + rootLogger.log(Level.SEVERE, "the database has not tables"); + + // loadTables(element); + element.setIsExpanded(false); + + treePanel.setExpanded(element, false); + + } else { + + for (int i = 0; i < result.size(); i++) { + + result.get(i).setIsExpanded(false); + result.get(i).setIsLoaded(true); + +// System.out.println(result.get(i).getName()); + + rootLogger.log(Level.INFO, "table: " + result.get(i).getName()); + + } + +// int numChildrenFolder = store.getChildCount(element); + + // if (numChildrenFolder == 0) { + + addChildren(element, result); + + // } + } + + element.setIsLoaded(true); + + + } + }); + +// System.out.println("End RPC - getTables"); + + rootLogger.log(Level.SEVERE, "End RPC getTables"); + + } + + public boolean getSelectedItemIsSchema() { + + return SelectedItemIsSchema; + } + + public LinkedHashMap getDataOnDB() { + return dataDBInfo; + } + + // public FileModel getSelectedItem(){ + // + // + // return treePanel.getSelectionModel().getSelectedItem(); + // + // } + + private void addChildren(FileModel parent, List children) { + + if (parent != null) { + + store.add(parent, children, true); + +// System.out.println("Added children in store"); + + rootLogger.log(Level.INFO, "Added children in store"); + } + } + + public String getResourceNameSelected() { + + return ResourceNameSelected; + + } + + public String getDatabaseNameSelected() { + + return DatabaseNameSelected; + + } + + public String getSchemaNameSelected() { + + return SchemaNameSelected; + + } + + public String getTableNameSelected() { + + return TableNameSelected; + + } + + private void setInfoOnSelectedItem(FileModel element) { + + infoOnSelectedItem = new LinkedHashMap(); + + if ((treeDepthSelectedItem == 4) && (element.isSchema() == true)) { // the + // selected + // element + // is + // a + // schema + +// System.out.println("is a schema"); + + rootLogger.log(Level.SEVERE, "setInfo for selected item schema"); + + SelectedItemIsSchema = true; + + // //recover schema name + // SchemaNameSelected = element.getName(); + + // recover database name + FileModel database = store.getParent(element); + + DatabaseNameSelected = database.getName(); + + // recover resource name + FileModel resource = store.getParent(database); + ResourceNameSelected = resource.getName(); + + infoOnSelectedItem.put("ResourceName", ResourceNameSelected); + infoOnSelectedItem.put("DatabaseName", DatabaseNameSelected); + + } + + else if ((treeDepthSelectedItem == 4) && (element.isSchema() == false)) { // the + // selected + // element + // is + // a + // table + // because + // the + // database + // is + // mysql + // type + +// System.out.println("is a table"); + + rootLogger.log(Level.SEVERE, "setInfo for selected item table"); + + // recover table name + TableNameSelected = element.getName(); + + // recover database name + FileModel database = store.getParent(element); + + DatabaseNameSelected = database.getName(); + + // recover resource name + FileModel resource = store.getParent(database); + ResourceNameSelected = resource.getName(); + + infoOnSelectedItem.put("ResourceName", ResourceNameSelected); + infoOnSelectedItem.put("DatabaseName", DatabaseNameSelected); + infoOnSelectedItem.put("TableName", TableNameSelected); + + } else if (treeDepthSelectedItem == 5) { // the selected item is a table + // so the database is + // postgres type + +// System.out.println("is a table"); + + rootLogger.log(Level.SEVERE, "setInfo for selected item table"); + + // recover table name + TableNameSelected = element.getName(); + + // recover schema name + FileModel schema = store.getParent(element); + SchemaNameSelected = schema.getName(); + + // recover database name + FileModel database = store.getParent(schema); + + DatabaseNameSelected = database.getName(); + + // recover resource name + FileModel resource = store.getParent(database); + ResourceNameSelected = resource.getName(); + + infoOnSelectedItem.put("ResourceName", ResourceNameSelected); + infoOnSelectedItem.put("DatabaseName", DatabaseNameSelected); + infoOnSelectedItem.put("SchemaName", SchemaNameSelected); + infoOnSelectedItem.put("TableName", TableNameSelected); + + } else if (treeDepthSelectedItem == 3) { // the selected item is a + // database + +// System.out.println("is a database"); + + rootLogger.log(Level.SEVERE, "setInfo for selected item database"); + + // recover database name + DatabaseNameSelected = element.getName(); + + // recover resource name + FileModel resource = store.getParent(element); + ResourceNameSelected = resource.getName(); + + infoOnSelectedItem.put("ResourceName", ResourceNameSelected); + infoOnSelectedItem.put("DatabaseName", DatabaseNameSelected); + + } + + } + + public LinkedHashMap getInfoOnSelectedItem() { + + return infoOnSelectedItem; + } + + public TreePanel getTreePanel() { + return this.treePanel; + } + + public TreeStore getTreeStore() { + return this.store; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java new file mode 100644 index 0000000..28cf0db --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java @@ -0,0 +1,413 @@ +package org.gcube.portlets.user.databasesmanager.client.toolbar; + + + +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerServiceAsync; +import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData; +import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent; +import org.gcube.portlets.user.databasesmanager.client.form.GxtFormSubmitQuery; +import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet; + +//import org.gcube.portlets.user.dbmanager.client.GWTdbManagerServiceAsync; +//import org.gcube.portlets.user.dbmanager.client.datamodel.SubmitQueryData; +//import org.gcube.portlets.user.dbmanager.client.events.SubmitQueryEvent; +//import org.gcube.portlets.user.dbmanager.client.form.GxtFormSubmitQuery; +//import org.gcube.portlets.user.dbmanager.client.utils.ConstantsPortlet; + +import com.extjs.gxt.ui.client.Style.ButtonArrowAlign; +import com.extjs.gxt.ui.client.Style.ButtonScale; +import com.extjs.gxt.ui.client.Style.Scroll; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.MessageBox; +import com.extjs.gxt.ui.client.widget.button.Button; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; +import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; +import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; +import com.google.gwt.event.shared.HandlerManager; + + +public class GxtToolbarFunctionality { + + private HandlerManager eventBus = null; + + private Button btnSubmitQuery; + // private Button btnGetInfo; + private Button btnShowCreateTable; + private Button btnSimpleSample; + private Button btnSmartSample; + private Button btnRandomSample; + + private SubmitQueryData data; + + private ToolBar toolBar; + + // the dialog that contains the form + private Dialog dialog = new Dialog(); + + // RPC service + private GWTdbManagerServiceAsync RPCservice = null; + + private static Logger rootLogger = Logger + .getLogger("GxtToolbarFunctionality"); + + public GxtToolbarFunctionality(HandlerManager eBus, + GWTdbManagerServiceAsync service) { + + eventBus = eBus; + RPCservice = service; + + toolBar = new ToolBar(); + initToolBar(); + addSelectionListenersOnToolBar(); + + } + + private void initToolBar() { + + // setLayout(new FlowLayout(10)); + + // Button for Submit Query + btnSubmitQuery = new Button(ConstantsPortlet.SUBMITQUERY); + // btnSubmitQuery.setIcon(Resources.ICONS.text()); + btnSubmitQuery.setScale(ButtonScale.SMALL); + btnSubmitQuery.setArrowAlign(ButtonArrowAlign.BOTTOM); + toolBar.add(btnSubmitQuery); + + // // Button to get information about a database + // btnGetInfo = new Button(ConstantsPortlet.GETINFO); + // btnGetInfo.setScale(ButtonScale.SMALL); + // btnGetInfo.setArrowAlign(ButtonArrowAlign.BOTTOM); + // toolBar.add(btnGetInfo); + + // Button to get the "show create table" + btnShowCreateTable = new Button(ConstantsPortlet.SHOWCREATETABLE); + btnShowCreateTable.setScale(ButtonScale.SMALL); + btnShowCreateTable.setArrowAlign(ButtonArrowAlign.BOTTOM); + toolBar.add(btnShowCreateTable); + + toolBar.add(new SeparatorToolItem()); + + // Button for Simple Sample + btnSimpleSample = new Button(ConstantsPortlet.SAMPLING); + btnSimpleSample.setScale(ButtonScale.SMALL); + btnSimpleSample.setArrowAlign(ButtonArrowAlign.BOTTOM); + + toolBar.add(btnSimpleSample); + + // Button for Smart Sample + btnSmartSample = new Button(ConstantsPortlet.SMARTSAMPLING); + btnSmartSample.setScale(ButtonScale.SMALL); + btnSmartSample.setArrowAlign(ButtonArrowAlign.BOTTOM); + + toolBar.add(btnSmartSample); + + // button fro Random Sample + btnRandomSample = new Button(ConstantsPortlet.RANDOMSAMPLING); + btnRandomSample.setScale(ButtonScale.SMALL); + btnRandomSample.setArrowAlign(ButtonArrowAlign.BOTTOM); + + toolBar.add(btnRandomSample); + + // add(toolBar, new FlowData(10)); + + btnSubmitQuery.disable(); + // btnGetInfo.disable(); + btnShowCreateTable.disable(); + btnSimpleSample.disable(); + btnSmartSample.disable(); + btnRandomSample.disable(); + + } + + private void addSelectionListenersOnToolBar() { + + btnSubmitQuery + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + data = null; + + // dialog to insert inputs in order to submit a query + + // final Dialog dialog = new Dialog(); + dialog.setLayout(new FitLayout()); + + dialog.setModal(true); + dialog.setBlinkModal(true); + + dialog.setButtons(Dialog.OKCANCEL); + + // dialog.setPlain(true); + // dialog.setCollapsible(false); + dialog.setResizable(false); + dialog.setHeading("Submit Query"); + dialog.setWidth(290); + dialog.setHeight(250); + + final GxtFormSubmitQuery form = new GxtFormSubmitQuery(); + + dialog.add(form); + dialog.show(); + + dialog.getButtonById(Dialog.OK).addSelectionListener( + new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + + // System.out.println("button OK event"); + + dialog.mask("Loading", "x-mask-loading"); + +// dialog.hide(); + + // recover info from dialog + setInfoOnSubmitQuery(form); + + // System.out + // .println("GxtToolbarFunctionality-> query submitted"); + + rootLogger.log(Level.SEVERE, + "query submitted"); + + } + }); + + dialog.getButtonById(Dialog.CANCEL) + .addSelectionListener( + new SelectionListener() { + + @Override + public void componentSelected( + ButtonEvent ce) { + + // System.out + // .println("button Cancel event"); + + rootLogger.log(Level.INFO, + "button Cancel event"); + + dialog.hide(); + + } + }); + + } + }); + + btnSimpleSample + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + // TODO Auto-generated method stub + + // TODO: insert the result of the sample operation + + // TODO: manage the exception case (returned from + // algorithm "Simple Sample") with an alert + + // System.out.println("simple sample event"); + + Dialog d = new Dialog(); + d.setHeading("Simple Sample"); + + // d.setBodyStyle("fontWeight:bold;padding:13px;"); + + d.setBodyStyle("padding:9px;"); + d.setSize(600, 400); + d.setScrollMode(Scroll.AUTO); + d.setHideOnButtonClick(true); + d.setModal(true); + d.setMaximizable(true); + d.addText("Result Table 1"); + d.show(); + + } + + }); + + btnSmartSample + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + // TODO Auto-generated method stub + + // TODO: insert the result of the sample operation + + // TODO: manage the exception case (returned from + // algorithm "Smart Sample") with an alert + + // System.out.println("simple sample event"); + + Dialog d = new Dialog(); + d.setHeading("Smart Sample"); + + // d.setBodyStyle("fontWeight:bold;padding:13px;"); + + d.setBodyStyle("padding:9px;"); + d.setSize(600, 400); + d.setScrollMode(Scroll.AUTO); + d.setHideOnButtonClick(true); + d.setModal(true); + d.setMaximizable(true); + d.addText("Result Table 2"); + d.show(); + + } + + }); + + btnRandomSample + .addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + // TODO Auto-generated method stub + + // TODO: insert the result of the sample operation + + // TODO: manage the exception case (returned from + // algorithm "Random Sample") with an alert + + // System.out.println("simple sample event"); + + Dialog d = new Dialog(); + d.setHeading("Random Sample"); + + // d.setBodyStyle("fontWeight:bold;padding:13px;"); + + d.setBodyStyle("padding:9px;"); + d.setSize(600, 400); + d.setScrollMode(Scroll.AUTO); + d.setHideOnButtonClick(true); + d.setModal(true); + d.setMaximizable(true); + d.addText("Result Table 3"); + d.show(); + + } + + }); + } + + public void disableButtonOnToolbar(int infoTreeDepthSelectedItem, + boolean infoSelectedItemIsSchema) { + + // System.out.println("GxtToolbarFunctionality-> depth: " + // + infoTreeDepthSelectedItem); + + rootLogger.log(Level.INFO, "selectedItem depth: " + + infoTreeDepthSelectedItem); + + switch (infoTreeDepthSelectedItem) { + + case 1: + btnSubmitQuery.disable(); + // btnGetInfo.disable(); + btnShowCreateTable.disable(); + btnSimpleSample.disable(); + btnSmartSample.disable(); + btnRandomSample.disable(); + + break; + + case 2: + btnSubmitQuery.disable(); + // btnGetInfo.enable(); + btnShowCreateTable.disable(); + btnSimpleSample.disable(); + btnSmartSample.disable(); + btnRandomSample.disable(); + break; + + case 3: + + btnSubmitQuery.enable(); + // btnGetInfo.disable(); + btnShowCreateTable.disable(); + btnSimpleSample.disable(); + btnSmartSample.disable(); + btnRandomSample.disable(); + + break; + + case 4: // check to verify that this level refers to schema or table + // and + // manage it differently + if (infoSelectedItemIsSchema == true) { + // this tree level is a schema + + btnSubmitQuery.enable(); + // btnShowCreateTable.enable(); + btnShowCreateTable.disable(); + btnSimpleSample.disable(); + btnSmartSample.disable(); + btnRandomSample.disable(); + + } else { + // this tree level is a table + btnSubmitQuery.enable(); + btnShowCreateTable.enable(); + btnSimpleSample.enable(); + btnSmartSample.enable(); + btnRandomSample.enable(); + + } + + break; + + case 5: // if there is the schema this level refers to table + + btnSubmitQuery.enable(); + btnShowCreateTable.enable(); + btnSimpleSample.enable(); + btnSmartSample.enable(); + btnRandomSample.enable(); + + break; + + } + + } + + public ToolBar getToolBar() { + return this.toolBar; + + } + + private void setInfoOnSubmitQuery(GxtFormSubmitQuery form) { + + data = form.getSubmitQueryData(); + + String query = data.getQuery(); + + if ((query == null) || (query.equals(""))) { + MessageBox.alert("Warning", "Query field null", null); + + } else { + + eventBus.fireEvent(new SubmitQueryEvent()); + } + + } + + public SubmitQueryData getSubmitQueryData() { + return data; + } + + public Dialog getDialogForm() { + + return dialog; + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/ConstantsPortlet.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/ConstantsPortlet.java new file mode 100644 index 0000000..2011f7d --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/utils/ConstantsPortlet.java @@ -0,0 +1,29 @@ +package org.gcube.portlets.user.databasesmanager.client.utils; + +public class ConstantsPortlet { + + // Div Gwt + public static final String CONTENTDIV = "contentDiv"; + + + //Toolbar button + public static final String SUBMITQUERY = "Submit Query"; + public static final String GETINFO = "Get Info"; + public static final String SHOWCREATETABLE = "Show Create Table"; +// public static final String SIMPLESAMPLE = "Simple Sample"; +// public static final String SMARTSAMPLE = "Smart Sample"; +// public static final String RANDOMSAMPLE = "Random Sample"; + public static final String SAMPLING = "Sampling"; + public static final String SMARTSAMPLING = "Smart Sampling"; + public static final String RANDOMSAMPLING = "Random Sampling"; + + //sql Dialects + public static final String POSTGRES = "POSTGRES"; + public static final String MYSQL = "MYSQL"; + public static final String NONE = "NONE"; + + + + + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java b/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java new file mode 100644 index 0000000..1b5e017 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/portlet/DatabasesManager.java @@ -0,0 +1,45 @@ +package org.gcube.portlets.user.databasesmanager.portlet; + +import java.io.IOException; + +import javax.portlet.GenericPortlet; +import javax.portlet.PortletException; +import javax.portlet.PortletRequestDispatcher; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; + +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; + +public class DatabasesManager extends GenericPortlet { + +// protected GCUBELog logger = new GCUBELog(StatisticalManager.class); + + + /** + * JSP folder name + */ + public static final String JSP_FOLDER = "/WEB-INF/jsp/"; + + /** + * + */ + public static final String VIEW_JSP = JSP_FOLDER + "DatabasesManager_view.jsp"; + + /** + * @param request .0 + * @param response . + * @throws IOException . + * @throws PortletException . + */ + public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { + +// logger.trace("StatisticalManager loading from JSP: "+VIEW_JSP); + +// logger.trace("setting context using ScopeHelper"); + ScopeHelper.setContext(request); + +// logger.trace("passing to the render"); + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP); + rd.include(request,response); + } +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java new file mode 100644 index 0000000..6e1c881 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java @@ -0,0 +1,958 @@ +package org.gcube.portlets.user.databasesmanager.server; + + + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; + +import javax.servlet.http.HttpSession; + +import org.apache.regexp.RE; +import org.apache.regexp.RESyntaxException; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.contentmanager.storageclient.model.protocol.smp.SMPURLConnection; +import org.gcube.data.analysis.statisticalmanager.proxies.StatisticalManagerDSL; +import org.gcube.data.analysis.statisticalmanager.proxies.StatisticalManagerFactory; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMAlgorithm; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMComputationConfig; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMComputationRequest; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMGroupedAlgorithms; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMListGroupedAlgorithms; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMOperationStatus; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMParameter; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMParameters; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMResourceType; +import org.gcube.data.analysis.statisticalmanager.stubs.types.SMTypeParameter; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMAbstractResource; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMComputation; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMEntries; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMFile; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMInputEntry; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMObject; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMOperationInfo; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMResource; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.SMTable; +import org.gcube.data.analysis.statisticalmanager.stubs.types.schema.StatisticalServiceType; +import org.gcube.dataanalysis.ecoengine.datatypes.enumtypes.PrimitiveTypes; +import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerService; +import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Parameter; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; +import org.gcube.portlets.user.databasesmanager.client.datamodel.Row; +import org.gcube.portlets.user.databasesmanager.server.util.SessionUtil; +//import org.gcube.portlets.user.dbmanager.client.GWTdbManagerService; +//import org.gcube.portlets.user.dbmanager.client.datamodel.FileModel; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Parameter; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Result; +//import org.gcube.portlets.user.dbmanager.client.datamodel.Row; +//import org.gcube.portlets.user.dbmanager.server.util.SessionUtil; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; +import com.thoughtworks.xstream.XStream; + +public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements + GWTdbManagerService { + + private LinkedHashMap outputMap; + private LinkedHashMap outputKey; + + private static Logger rootLogger = Logger + .getLogger("GWTdbManagerServiceImpl"); + + public GWTdbManagerServiceImpl() { + + } + + public List getResource() throws Exception { + + List inputParameters = new ArrayList(); + // List outputParameters = new ArrayList(); + + List outputParameters = new ArrayList(); + // Parameter data = new Parameter(); + + // get list of algorithms + + List algorithms = new ArrayList(); + + algorithms = getDatabaseManagerAlgorithms(); + + // get algorithmId + + String algorithmId = null; + + for (int i = 0; i < algorithms.size(); i++) { + + if (algorithms.get(i).equals("LISTDBNAMES")) { + + algorithmId = algorithms.get(i); + + // System.out.println("algorithmId: " + algorithmId); + + rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId); + + } + + } + + // get input parameters of the algorithm + + inputParameters = getParameters(algorithmId); + + // System.out.println("getting input parameters"); + + rootLogger.log(Level.SEVERE, "getting input parameters"); + + for (int i = 0; i < inputParameters.size(); i++) { + + // System.out.println(inputParameters.get(i).getName()); + + rootLogger.log(Level.INFO, inputParameters.get(i).getName()); + + } + + String computationId = startComputation(algorithmId, inputParameters); + + // retrieve data + + // System.out.println("output data retrieved"); + + rootLogger.log(Level.SEVERE, "output data retrieved"); + + for (int i = 0; i < outputMap.size(); i++) { + + // outputParameters.add(outputMap.get(String.valueOf(i))); + + FileModel obj = new FileModel(outputMap.get(String.valueOf(i))); + + // obj.setIsLoaded(true); + + outputParameters.add(obj); + + } + + return outputParameters; + + } + + @Override + public LinkedHashMap getDBInfo(String resourceName) + throws Exception { + + List inputParameters = new ArrayList(); + + // List outputParameters = new ArrayList(); + + // List outputParameters = new ArrayList(); + + LinkedHashMap outputParameters = new LinkedHashMap(); + + // get list of algorithms + + List algorithms = new ArrayList(); + + algorithms = getDatabaseManagerAlgorithms(); + + // get algorithmId + + String algorithmId = null; + + for (int i = 0; i < algorithms.size(); i++) { + + if (algorithms.get(i).equals("LISTDBINFO")) { + + algorithmId = algorithms.get(i); + + // System.out.println("algorithmId: " + algorithmId); + + rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId); + + } + + } + + // get input parameters of the algorithm + + rootLogger.log(Level.SEVERE, "getting input parameters"); + + inputParameters = getParameters(algorithmId); + + for (int i = 0; i < inputParameters.size(); i++) { + + // System.out.println(inputParameters.get(i).getName()); + + inputParameters.get(i).setValue(resourceName); + + rootLogger.log(Level.INFO, inputParameters.get(i).getName()); + + } + + String computationId = startComputation(algorithmId, inputParameters); + + // retrieve data + + // System.out.println("output data retrieved"); + + rootLogger.log(Level.SEVERE, "output data retrieved"); + + for (int i = 0; i < outputMap.size(); i++) { + + // outputParameters.add(outputKey.get(String.valueOf(i)) + " " + // + outputMap.get(String.valueOf(i))); + + FileModel obj = new FileModel(outputMap.get(String.valueOf(i))); + + // obj.setIsLoaded(true); + + // outputParameters.add(obj); + + // System.out.println("value: " + outputMap.get(String.valueOf(i))); + + // System.out.println("key: " + outputKey.get(String.valueOf(i))); + + outputParameters.put(outputKey.get(String.valueOf(i)), obj); + + } + + return outputParameters; + + } + + @Override + public List getDBSchema(LinkedHashMap dataInput) + throws Exception { + + List inputParameters = new ArrayList(); + // List outputParameters = new ArrayList(); + + List outputParameters = new ArrayList(); + + // get list of algorithms + + List algorithms = new ArrayList(); + + algorithms = getDatabaseManagerAlgorithms(); + + // get algorithmId + + String algorithmId = null; + + for (int i = 0; i < algorithms.size(); i++) { + + if (algorithms.get(i).equals("LISTDBSCHEMA")) { + + algorithmId = algorithms.get(i); + + // System.out.println("algorithmId: " + algorithmId); + + rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId); + + } + + } + + // get input parameters of the algorithm + rootLogger.log(Level.SEVERE, "getting input parameters"); + + inputParameters = getParameters(algorithmId); + + for (int i = 0; i < inputParameters.size(); i++) { + + // System.out.println(inputParameters.get(i).getName()); + + rootLogger.log(Level.INFO, inputParameters.get(i).getName()); + + } + + inputParameters.get(0).setValue(dataInput.get("ResourceName")); + inputParameters.get(1).setValue(dataInput.get("DatabaseName")); + + String computationId = startComputation(algorithmId, inputParameters); + + // retrieve data + + // System.out.println("output data retrieved"); + + rootLogger.log(Level.SEVERE, "output data retrieved"); + + for (int i = 0; i < outputMap.size(); i++) { + + // outputParameters.add(outputKey.get(String.valueOf(i)) + " " + // + outputMap.get(String.valueOf(i))); + + FileModel obj = new FileModel(outputMap.get(String.valueOf(i))); + + obj.setIsSchema(true); + + // obj.setIsLoaded(true); + + outputParameters.add(obj); + + } + + return outputParameters; + + } + + @Override + public List getTables(LinkedHashMap dataInput) + throws Exception { + + List inputParameters = new ArrayList(); + + // List outputParameters = new ArrayList(); + + List outputParameters = new ArrayList(); + + // get list of algorithms + + List algorithms = new ArrayList(); + + algorithms = getDatabaseManagerAlgorithms(); + + // get algorithmId + + String algorithmId = null; + + for (int i = 0; i < algorithms.size(); i++) { + + if (algorithms.get(i).equals("LISTTABLES")) { + + algorithmId = algorithms.get(i); + + // System.out.println("algorithmId: " + algorithmId); + + rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId); + + } + + } + + // get input parameters of the algorithm + + rootLogger.log(Level.SEVERE, "getting input parameters"); + + inputParameters = getParameters(algorithmId); + + for (int i = 0; i < inputParameters.size(); i++) { + + // System.out.println(inputParameters.get(i).getName()); + + rootLogger.log(Level.INFO, inputParameters.get(i).getName()); + + } + + inputParameters.get(0).setValue(dataInput.get("ResourceName")); + inputParameters.get(1).setValue(dataInput.get("DatabaseName")); + inputParameters.get(2).setValue(dataInput.get("SchemaName")); + + // System.out.println("size outputMap pre computation: " + // + outputMap.size()); + + String computationId = startComputation(algorithmId, inputParameters); + + // retrieve data + + // System.out.println("output data retrieved"); + + rootLogger.log(Level.SEVERE, "output data retrieved"); + + System.out.println("size outputMap: " + outputMap.size()); + + for (int i = 0; i < outputMap.size(); i++) { + + // outputParameters.add(outputKey.get(String.valueOf(i)) + " " + // + outputMap.get(String.valueOf(i))); + + FileModel obj = new FileModel(outputMap.get(String.valueOf(i))); + + // obj.setIsLoaded(true); + + // obj.setIsTable(true); + + outputParameters.add(obj); + + } + + return outputParameters; + + } + + @Override + public List submitQuery(LinkedHashMap dataDB, + String query, boolean valueReadOnlyQuery, + boolean smartCorrectionQuery, String language) throws Exception { + + // System.out.println("language detected: " + language); + + rootLogger.log(Level.SEVERE, "language used for query conversion: " + + language); + + List inputParameters = new ArrayList(); + // LinkedHashMap output = new LinkedHashMap(); + + List output = new ArrayList(); + + // get list of algorithms + + List algorithms = new ArrayList(); + + algorithms = getDatabaseManagerAlgorithms(); + + // get algorithmId + + String algorithmId = null; + + for (int i = 0; i < algorithms.size(); i++) { + + if (algorithms.get(i).equals("SUBMITQUERY")) { + + algorithmId = algorithms.get(i); + + // System.out.println("algorithmId: " + algorithmId); + + rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId); + + } + + } + + // get input parameters of the algorithm + + rootLogger.log(Level.SEVERE, "getting input parameters"); + + inputParameters = getParameters(algorithmId); + + // for (int i = 0; i < inputParameters.size(); i++) { + // + // System.out.println(inputParameters.get(i).getName()); + // System.out.println(inputParameters.get(i).getDefaultValue()); + // + // } + + for (int i = 0; i < inputParameters.size(); i++) { + + // System.out.println(inputParameters.get(i).getName()); + // System.out.println(inputParameters.get(i).getDefaultValue()); + + rootLogger.log(Level.INFO, inputParameters.get(i).getName()); + + } + + inputParameters.get(0).setValue(dataDB.get("ResourceName")); + inputParameters.get(1).setValue(dataDB.get("DatabaseName")); + + inputParameters.get(2).setValue(String.valueOf(valueReadOnlyQuery)); + inputParameters.get(3).setValue(String.valueOf(smartCorrectionQuery)); + + inputParameters.get(4).setValue(language); + inputParameters.get(5).setValue(query); + + // System.out.println("size outputMap pre computation: " + // + outputMap.size()); + + String computationId = startComputation(algorithmId, inputParameters); + + // retrieve data + +// System.out.println("output data retrieved"); + +// System.out.println("size outputMap: " + outputMap.size()); + + rootLogger.log(Level.SEVERE, "output data retrieved"); + rootLogger.log(Level.SEVERE, "output data size: " + outputMap.size()); + + for (int i = 0; i < outputMap.size(); i++) { + + Result row = new Result(outputKey.get(String.valueOf(i)), + outputMap.get(String.valueOf(i))); + + output.add(row); + + // outputParameters.add(outputKey.get(String.valueOf(i)) + " " + // + outputMap.get(String.valueOf(i))); + + // FileModel obj = new FileModel(outputMap.get(String.valueOf(i))); + // outputParameters.add(obj); + + } + + // for (int i = 0; i < outputMap.size(); i++) { + // + // // outputParameters.add(outputKey.get(String.valueOf(i)) + " " + // // + outputMap.get(String.valueOf(i))); + // + // FileModel obj = new FileModel(outputMap.get(String.valueOf(i))); + // outputParameters.add(obj); + // + // } + + return output; + + } + + public List parseCVSString(List result, List attrNames) + throws Exception { + + List rows = new ArrayList(); + + if (result != null) { + + for (int i = 0; i < result.size(); i++) { + + List attrValues = parse(result.get(i).getValue()); + + Row element = new Row(attrNames, attrValues); + + rows.add(element); + + } + + } + + return rows; + + // code worked + + // List values = parse(row); + // + // for (int i = 0; i < values.size(); i++) { + // + // System.out.println("vaalue: " + values.get(i)); + // + // } + // + // Row element = new Row(attributes, values); + // + // return element; + + // List rowElements = new ArrayList(); + // + // for (int i=0;i attributes = parse(result.get(i).getValue()); + // + // Row element=new Row(attributes); + // + // rowElements.add(element); + // } + // + // System.out.println("server rowElement size: " + rowElements.size()); + // + // return rowElements; + + } + + private List parse(String row) throws Exception { + + String delimiter = ","; + +// System.out.println("row: " + row); + + List elements = new ArrayList(); + String phrase = row; + int idxdelim = -1; + boolean quot = false; + phrase = phrase.trim(); + while ((idxdelim = phrase.indexOf(delimiter)) >= 0) { + quot = phrase.startsWith("\""); + if (quot) { + phrase = phrase.substring(1); + String quoted = ""; + if (phrase.startsWith("\"")) + phrase = phrase.substring(1); + else { + RE regexp = new RE("[^\\\\]\""); + boolean matching = regexp.match(phrase); + + if (matching) { + int i0 = regexp.getParenStart(0); + quoted = phrase.substring(0, i0 + 1).trim(); + phrase = phrase.substring(i0 + 2).trim(); + } + } + + if (phrase.startsWith(delimiter)) + phrase = phrase.substring(1); + + elements.add(quoted); + + } else { + elements.add(phrase.substring(0, idxdelim)); + phrase = phrase.substring(idxdelim + 1).trim(); + } + + // System.out.println("server token: " + phrase); + } + if (phrase.startsWith("\"")) + phrase = phrase.substring(1); + + if (phrase.endsWith("\"")) + phrase = phrase.substring(0, phrase.length() - 1); + + elements.add(phrase); + +// System.out.println("size: " + elements.size()); + + return elements; + + } + + private List getDatabaseManagerAlgorithms() throws Exception { + + ArrayList dbAlg = new ArrayList(); + StatisticalManagerFactory factory = getFactory(); + + // get and print algorithms + SMListGroupedAlgorithms groups = factory.getAlgorithms(); + + if (groups == null) +// System.out.println("GROUPS OF ALGORITHMS IS NULL!"); + rootLogger.log(Level.SEVERE,"GROUPS OF ALGORITHMS IS NULL!"); + else +// System.out.println("GROUPS OF ALGORITHMS IS NOT NULL!"); + rootLogger.log(Level.SEVERE, "GROUPS OF ALGORITHMS IS NOT NULL!"); + + // get list categories + for (SMGroupedAlgorithms group : groups.thelist()) { + + // if (group.category().equals("DATABASES")) { + + for (SMAlgorithm algorithm : group.thelist()) { + + // if (algorithm.name().equals("LISTDBINFO")) { + + // System.out.println(algorithm.name()); + + dbAlg.add(algorithm.name()); + // } + + } + } + + return dbAlg; + + } + + private List getParameters(String algorithmId) { + + // System.out.println("algorithmId: " + algorithmId); + + StatisticalManagerFactory factory = getFactory(); + SMParameters smParams = factory.getAlgorithmParameters(algorithmId); + + List params = new ArrayList(); + + for (SMParameter smParam : smParams.list()) { + SMTypeParameter smType = smParam.type(); + StatisticalServiceType smTypeName = smType.name(); + + String paramName = smParam.name(); + String paramDescription = smParam.description(); + String defaultValue = smParam.defaultValue(); + String objectType = smType.values().get(0); + +// System.out.println("GWTdbManagerServiceImpl->parameters"); + + + //CHECK +// rootLogger.log(Level.INFO, "parameters: "); + +// rootLogger.log(Level.INFO, paramName); +// rootLogger.log(Level.INFO, paramDescription); +// rootLogger.log(Level.INFO, objectType); +// rootLogger.log(Level.INFO, defaultValue); + + + +// System.out.println(paramName); +// System.out.println(paramDescription); +// System.out.println(objectType); +// System.out.println(defaultValue); + + Parameter objectParam = new Parameter(paramName, paramDescription, + objectType, defaultValue); + + params.add(objectParam); + + } + + return params; + } + + private String startComputation(String algorithmName, + List parameters) throws Exception { + + SMComputationConfig config = new SMComputationConfig(); + + SMInputEntry[] list = new SMInputEntry[parameters.size()]; + int i = 0; + + for (Parameter p : parameters) + list[i++] = new SMInputEntry(p.getName(), p.getValue()); + config.parameters(new SMEntries(list)); + config.algorithm(algorithmName); + + // create a computation request + SMComputationRequest request = new SMComputationRequest(); + request.user(getUsername()); + request.config(config); + + try { + StatisticalManagerFactory factory = getFactory(); + + String computationId = factory.executeComputation(request); + + float percentage = 0; + String scope = getScope(); + String username = getUsername(); + + while (percentage < 100) { + percentage = checkComputationStatus(scope, computationId, + username); + Thread.sleep(1000); + } + + return computationId; + + } catch (Exception e) { + +// e.printStackTrace(); + throw e; + } + } + + private float checkComputationStatus(String scope, String computationId, + String user) throws Exception { + + ScopeProvider.instance.set(scope); + + StatisticalManagerFactory factory = StatisticalManagerDSL + .createStateful().build(); + + SMComputation computation = factory.getComputation(computationId); + + SMOperationStatus status = SMOperationStatus.values()[computation + .operationStatus()]; + + // this.outputMap=null; + + float percentage = 0; + + if (status == SMOperationStatus.RUNNING) { + +// System.out.println("GWTdbManagerServiceImpl->RUNNING"); + + rootLogger.log(Level.SEVERE, "RUNNING"); + + SMOperationInfo infos = factory.getComputationInfo(computationId, + user); + // percentage = Float.parseFloat(infos.percentage()); + // System.out.println("GWTdbManagerServiceImpl->Percentage:" + + // percentage); + // computation = factory.getComputation(computationId); + + status = SMOperationStatus.values()[computation.operationStatus()]; + } else if ((status == SMOperationStatus.COMPLETED) + || (status == SMOperationStatus.FAILED)) { + +// System.out.println("GWTdbManagerServiceImpl->COMPLETED OR FAILED"); + rootLogger.log(Level.SEVERE, "COMPLETED OR FAILED"); + + SMAbstractResource abstractResource = computation + .abstractResource(); + SMResource smResource = abstractResource.resource(); + int resourceTypeIndex = smResource.resourceType(); + SMResourceType smResType = SMResourceType.values()[resourceTypeIndex]; + + //TODO: ECXEPTION MANAGEMENT +// if (SMResourceType.ERROR){ +// +// +// } + //throws(smResource.description()); + displayOutput(smResource, smResType); + +// System.out.println("GWTdbManagerServiceImpl-> SM resource Name: " +// + smResource.name()); + + rootLogger.log(Level.SEVERE, "SM resource Name: " + smResource.name()); + +// System.out.println("GWTdbManagerServiceImpl-> SM resource ID: " +// + smResource.resourceId()); + + rootLogger.log(Level.SEVERE, "SM resource ID: " + smResource.resourceId()); + +// System.out +// .println("GWTdbManagerServiceImpl-> SM resource Description: " +// + smResource.description()); + + rootLogger.log(Level.SEVERE, "SM resource Description: " + smResource.description()); + + + + percentage = 100; + + } + + return percentage; + } + + private void displayOutput(SMResource smResource, SMResourceType smResType) + throws Exception { + +// System.out.println("displayOutput"); + + rootLogger.log(Level.SEVERE, "displayOutput"); + + outputMap = new LinkedHashMap(); + + if (smResType.equals(SMResourceType.OBJECT)) { + + // switch (smResType) { + // case FILE: + // SMFile fileRes = (SMFile) smResource; + // System.out.println("Output is a file"); + // break; + // case OBJECT: + SMObject objRes = (SMObject) smResource; + if (objRes.name().contentEquals(PrimitiveTypes.MAP.toString())) { +// System.out.println("Output is a map"); + + rootLogger.log(Level.SEVERE, "Output is a map"); + // Map outputMap = getMap(objRes); + this.outputMap = (LinkedHashMap) getMap(objRes); + } else if (objRes.name().contentEquals( + PrimitiveTypes.IMAGES.toString())) { +// System.out.println("Output are images"); + rootLogger.log(Level.SEVERE, "Output are images"); + } else +// System.out.println("Output is other"); + rootLogger.log(Level.SEVERE, "Output is other"); + } + + //EXCEPTION MANAGEMENT + + if(smResType.equals(SMResourceType.ERROR)) { + throw new Exception(smResource.description()); + + } + // break; + // case TABULAR: + // SMTable tableRes = (SMTable) smResource; + // System.out.println("Output is a table"); + // break; + // } + } + + private Map getMap(SMObject objRes) throws Exception { + +// System.out.println("getMap"); + + rootLogger.log(Level.SEVERE, "getMap"); + + outputKey = new LinkedHashMap(); + + InputStream is = getStorageClientInputStream(objRes.url()); + // object serializer + XStream xstream = new XStream(); + xstream.alias( + "org.gcube_system.namespaces.data.analysis.statisticalmanager.types.SMObject", + SMObject.class); + xstream.alias( + "org.gcube_system.namespaces.data.analysis.statisticalmanager.types.SMFile", + SMFile.class); + xstream.alias( + "org.gcube_system.namespaces.data.analysis.statisticalmanager.types.SMResource", + SMResource.class); + xstream.alias( + "org.gcube_system.namespaces.data.analysis.statisticalmanager.types.SMTable", + SMTable.class); + + @SuppressWarnings("unchecked") + Map smMap = (Map) (xstream + .fromXML(is)); + is.close(); + + LinkedHashMap outputmap = new LinkedHashMap(); + + int i = 0; + for (String key : smMap.keySet()) { + // add key value + + outputKey.put(String.valueOf(i), key); + + SMResource smres = smMap.get(key); + int resourceTypeIndex = smres.resourceType(); + SMResourceType smsubResType = SMResourceType.values()[resourceTypeIndex]; + +// System.out.println("GWTdbManagerServiceImpl-> ResourceType:" +// + smsubResType); + + rootLogger.log(Level.INFO, "ResourceType: " + smsubResType); + + if (smsubResType == SMResourceType.OBJECT) { + SMObject obje = (SMObject) smres; + String outstring = obje.url(); + +// System.out.println("key :" + key); + + rootLogger.log(Level.INFO, "key: " + smsubResType); + +// System.out.println("Object:" +// + new String(outstring.getBytes(), "UTF-8")); + + rootLogger.log(Level.INFO, "Object: " + new String(outstring.getBytes(), "UTF-8")); + + // outputmap.put(key, outstring); + + outputmap.put(String.valueOf(i), outstring); + + i++; + } + } + +// System.out.println("Map retrieved with size: " + smMap.size()); + + rootLogger.log(Level.SEVERE, "Map retrieved with size: " + smMap.size()); + return outputmap; + } + + private InputStream getStorageClientInputStream(String url) + throws Exception { + URL u = new URL(null, url, new URLStreamHandler() { + @Override + protected URLConnection openConnection(URL u) throws IOException { + return new SMPURLConnection(u); + } + }); + return u.openConnection().getInputStream(); + } + + private StatisticalManagerFactory getFactory() { + HttpSession httpSession = this.getThreadLocalRequest().getSession(); + return SessionUtil.getFactory(httpSession); + } + + private String getUsername() { + HttpSession httpSession = this.getThreadLocalRequest().getSession(); + return SessionUtil.getUsername(httpSession); + } + + private String getScope() { + HttpSession httpSession = this.getThreadLocalRequest().getSession(); + return SessionUtil.getScope(httpSession); + + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GreetingServiceImpl.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GreetingServiceImpl.java new file mode 100644 index 0000000..85b5881 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GreetingServiceImpl.java @@ -0,0 +1,48 @@ +//package org.gcube.portlets.user.databasesmanager.server; +// +//import org.gcube.portlets.user.databasesmanager.client.GreetingService; +//import org.gcube.portlets.user.databasesmanager.shared.FieldVerifier; +//import com.google.gwt.user.server.rpc.RemoteServiceServlet; +// +///** +// * The server side implementation of the RPC service. +// */ +//@SuppressWarnings("serial") +//public class GreetingServiceImpl extends RemoteServiceServlet implements +// GreetingService { +// +// public String greetServer(String input) throws IllegalArgumentException { +// // Verify that the input is valid. +// if (!FieldVerifier.isValidName(input)) { +// // If the input is not valid, throw an IllegalArgumentException back to +// // the client. +// throw new IllegalArgumentException( +// "Name must be at least 4 characters long"); +// } +// +// String serverInfo = getServletContext().getServerInfo(); +// String userAgent = getThreadLocalRequest().getHeader("User-Agent"); +// +// // Escape data from the client to avoid cross-site script vulnerabilities. +// input = escapeHtml(input); +// userAgent = escapeHtml(userAgent); +// +// return "Hello, " + input + "!

I am running " + serverInfo +// + ".

It looks like you are using:
" + userAgent; +// } +// +// /** +// * Escape an html string. Escaping data received from the client helps to +// * prevent cross-site script vulnerabilities. +// * +// * @param html the html string to escape +// * @return the escaped string +// */ +// private String escapeHtml(String html) { +// if (html == null) { +// return null; +// } +// return html.replaceAll("&", "&").replaceAll("<", "<").replaceAll( +// ">", ">"); +// } +//} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java new file mode 100644 index 0000000..864b94e --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/util/SessionUtil.java @@ -0,0 +1,110 @@ +package org.gcube.portlets.user.databasesmanager.server.util; + + + +import java.util.concurrent.TimeUnit; + +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.data.analysis.statisticalmanager.proxies.StatisticalManagerDSL; +import org.gcube.data.analysis.statisticalmanager.proxies.StatisticalManagerDataSpace; +import org.gcube.data.analysis.statisticalmanager.proxies.StatisticalManagerFactory; +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; + +/** + * @author "Angela Italiano angela.italiano@isti.cnr.it" + * + */ +public class SessionUtil { + + protected static Logger logger = Logger.getLogger(SessionUtil.class); + + + + public static ASLSession getSession(HttpSession httpSession) { + String sessionID = httpSession.getId(); + String user = (String) httpSession + .getAttribute(ScopeHelper.USERNAME_ATTRIBUTE); + + if (user == null) { + + user = "loredana.liccardo"; + httpSession.setAttribute(ScopeHelper.USERNAME_ATTRIBUTE, user); + ScopeProvider.instance.set("/gcube/devsec/devVRE"); + ASLSession session = SessionManager.getInstance().getASLSession( + sessionID, user); + session.setScope("/gcube/devsec/devVRE"); + + return session; +// return null; + + } else + { + logger.trace("user found in session " + user); + } + ASLSession session = SessionManager.getInstance().getASLSession( + sessionID, user); + + return session; + } + + + public static StatisticalManagerFactory getFactory(HttpSession httpSession) { + ASLSession session = getSession(httpSession); + return getFactory(session); + } + + public static StatisticalManagerFactory getFactory(ASLSession session) { + ScopeProvider.instance.set(session.getScope()); + + return getFactory(session.getScope()); + } + + public static StatisticalManagerFactory getFactory(String scope) { + ScopeProvider.instance.set(scope.toString()); + + + return StatisticalManagerDSL.createStateful() + .withTimeout(5, TimeUnit.MINUTES).build(); // IS + + } + + public static StatisticalManagerDataSpace getDataSpaceService( + HttpSession httpSession) { + ASLSession session = getSession(httpSession); + return getDataSpaceService(session); + } + + public static StatisticalManagerDataSpace getDataSpaceService( + ASLSession session) { + ScopeProvider.instance.set(getScope(session)); + + return StatisticalManagerDSL.dataSpace() + .withTimeout(5, TimeUnit.MINUTES).build(); + } + + + + public static String getUsername(HttpSession httpSession) { + ASLSession session = getSession(httpSession); + return getUsername(session); + } + + private static String getUsername(ASLSession session) { + return session.getUsername(); + } + + public static String getScope(HttpSession httpSession) { + ASLSession session = getSession(httpSession); + return getScope(session); + } + + private static String getScope(ASLSession session) { + return session.getScope().toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/shared/FieldVerifier.java b/src/main/java/org/gcube/portlets/user/databasesmanager/shared/FieldVerifier.java new file mode 100644 index 0000000..1b0a3e6 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/shared/FieldVerifier.java @@ -0,0 +1,42 @@ +package org.gcube.portlets.user.databasesmanager.shared; + +/** + *

+ * FieldVerifier validates that the name the user enters is valid. + *

+ *

+ * This class is in the shared packing because we use it in both + * the client code and on the server. On the client, we verify that the name is + * valid before sending an RPC request so the user doesn't have to wait for a + * network round trip to get feedback. On the server, we verify that the name is + * correct to ensure that the input is correct regardless of where the RPC + * originates. + *

+ *

+ * When creating a class that is used on both the client and the server, be sure + * that all code is translatable and does not use native JavaScript. Code that + * is note translatable (such as code that interacts with a database or the file + * system) cannot be compiled into client side JavaScript. Code that uses native + * JavaScript (such as Widgets) cannot be run on the server. + *

+ */ +public class FieldVerifier { + + /** + * Verifies that the specified name is valid for our service. + * + * In this example, we only require that the name is at least four + * characters. In your application, you can use more complex checks to ensure + * that usernames, passwords, email addresses, URLs, and other fields have the + * proper syntax. + * + * @param name the name to validate + * @return true if valid, false if invalid + */ + public static boolean isValidName(String name) { + if (name == null) { + return false; + } + return name.length() > 3; + } +} diff --git a/src/main/resources/org/gcube/portlets/user/databasesmanager/DatabasesManager.gwt.xml b/src/main/resources/org/gcube/portlets/user/databasesmanager/DatabasesManager.gwt.xml new file mode 100644 index 0000000..509b7d0 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/databasesmanager/DatabasesManager.gwt.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/gcube/portlets/user/databasesmanager/client/Messages.properties b/src/main/resources/org/gcube/portlets/user/databasesmanager/client/Messages.properties new file mode 100644 index 0000000..c222555 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/databasesmanager/client/Messages.properties @@ -0,0 +1,2 @@ +sendButton = Send +nameField = Enter your name \ No newline at end of file diff --git a/src/main/resources/org/gcube/portlets/user/databasesmanager/client/Messages_fr.properties b/src/main/resources/org/gcube/portlets/user/databasesmanager/client/Messages_fr.properties new file mode 100644 index 0000000..b4a7627 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/user/databasesmanager/client/Messages_fr.properties @@ -0,0 +1,2 @@ +sendButton = Envoyer +nameField = Entrez votre nom \ No newline at end of file diff --git a/src/main/webapp/DatabasesManager.css b/src/main/webapp/DatabasesManager.css new file mode 100644 index 0000000..7aca7ac --- /dev/null +++ b/src/main/webapp/DatabasesManager.css @@ -0,0 +1,34 @@ +/** Add css rules here for your application. */ + + +/** Example rules used by the template application (remove for your app) */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ +.gwt-DialogBox { + width: 400px; +} + +.dialogVPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} diff --git a/src/main/webapp/DatabasesManager.html b/src/main/webapp/DatabasesManager.html new file mode 100644 index 0000000..382117d --- /dev/null +++ b/src/main/webapp/DatabasesManager.html @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + +Database Management Web Application + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/DatabasesManager_view.jsp b/src/main/webapp/WEB-INF/jsp/DatabasesManager_view.jsp new file mode 100644 index 0000000..b105c8d --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/DatabasesManager_view.jsp @@ -0,0 +1,13 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + + + + + + + + + + +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml new file mode 100644 index 0000000..2047684 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties new file mode 100644 index 0000000..d6d2c48 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -0,0 +1,9 @@ +name=DatabasesManager +module-group-id=liferay +module-incremental-version=1 +tags= +short-description= +change-log= +page-url=http://www.d4science.eu +author=D4Science EU +licenses= \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml new file mode 100644 index 0000000..ca70ac3 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -0,0 +1,11 @@ + + + + + + DatabasesManager + false + false + false + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml new file mode 100644 index 0000000..c1157e2 --- /dev/null +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -0,0 +1,18 @@ + + + + DatabasesManager + DatabasesManager + DatabasesManager + org.gcube.portlets.user.databasesmanager.portlet.DatabasesManager + 0 + + text/html + VIEW + + + DatabasesManager + DatabasesManager + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..e3e898a --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,47 @@ + + + + + + + + + dbmanagerservlet + org.gcube.portlets.user.databasesmanager.server.GWTdbManagerServiceImpl + + + + jUnitHostImpl + com.google.gwt.junit.server.JUnitHostImpl + + + + + + + + + + dbmanagerservlet + /databasesmanager/dbManagerService + + + + jUnitHostImpl + /org.gcube.portlets.user.databasesmanager.DatabasesManagerJUnit/junithost/* + + + + jUnitHostImpl + /databasesmanager/junithost/* + + + + + + DatabasesManager.html + + + diff --git a/src/main/webapp/resources/chart/open-flash-chart.swf b/src/main/webapp/resources/chart/open-flash-chart.swf new file mode 100644 index 0000000..5ec4444 Binary files /dev/null and b/src/main/webapp/resources/chart/open-flash-chart.swf differ diff --git a/src/main/webapp/resources/css/gxt-all.css b/src/main/webapp/resources/css/gxt-all.css new file mode 100644 index 0000000..1e8b8ef --- /dev/null +++ b/src/main/webapp/resources/css/gxt-all.css @@ -0,0 +1,7454 @@ +html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';} +.x-contrast-test { + background: url(../images/default/s.gif); + visibility: hidden; + position: relative; + left: -1000px; + top: -1000px; +} +.ext-el-mask { + z-index: 100; + position: absolute; + top: 0; + left: 0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity = 50); + width: 100%; + height: 100%; + zoom: 1; +} + +.ext-el-mask-msg { + z-index: 101; + position: absolute; + top: 0; + left: 0; + border: 1px solid; + background: repeat-x 0 -16px; + padding: 2px; +} + +.ext-el-mask-msg div { + padding: 5px 10px 5px 10px; + border: 1px solid; + cursor: wait; +} + +.ext-webkit *:focus { + outline: none !important; +} + +.ext-webkit .x-form-check-wrap input:focus { + outline: auto !important; +} + +.ext-shim { + position: absolute; + visibility: hidden; + left: 0; + top: 0; + overflow: hidden; +} + +.ext-ie .ext-shim { + filter: alpha(opacity = 0); +} + +.ext-ie6 .ext-shim { + margin-left: 5px; + margin-top: 3px; +} + +.x-mask-loading div { + padding: 5px 10px 5px 25px; + background: no-repeat 5px 5px; + line-height: 16px; +} + +.x-hidden,.x-hide-offsets { + position: absolute !important; + left: -10000px !important; + top: -10000px !important; + visibility: hidden !important; +} + +.x-hide-display { + display: none !important; +} + +.x-hide-visibility { + visibility: hidden !important; +} + +.x-masked { + overflow: hidden !important; +} + +.x-masked-relative { + position: relative !important; +} + +.x-masked select,.x-masked object,.x-masked embed { + visibility: hidden; +} + +.x-layer { + visibility: hidden; +} + +.x-unselectable,.x-unselectable * { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore; +} + +.x-unselectable-single { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore; +} + +.x-selectable,.x-selectable * { + -moz-user-select: text !important; + -webkit-user-select: auto; +} + +.x-repaint { + zoom: 1; + background-color: transparent; + -moz-outline: none; + outline: 0 none; +} + +.x-item-disabled { + cursor: default; + opacity: .6; + -moz-opacity: .6; + filter: alpha(opacity = 60); +} + +.ext-ie .x-item-disabled { + filter: none !important; +} + +.x-item-disabled * { + cursor: default !important; +} + +.x-splitbar-proxy { + position: absolute; + visibility: hidden; + z-index: 20001; + zoom: 1; + line-height: 1px; + font-size: 1px; + overflow: hidden; +} + +.x-splitbar-h,.x-splitbar-proxy-h { + cursor: e-resize; + cursor: col-resize; +} + +.x-splitbar-v,.x-splitbar-proxy-v { + cursor: s-resize; + cursor: row-resize; +} + +.x-color-palette { + width: 150px; + height: 92px; + cursor: pointer; + -moz-outline: 0 none; + outline: 0 none; +} + +.x-color-palette a { + border: 1px solid; + float: left; + padding: 2px; + text-decoration: none; + -moz-outline: 0 none; + outline: 0 none; + cursor: pointer; +} + +.x-color-palette a.x-color-palette-hover,.x-color-palette a.x-color-palette-sel { + border: 1px solid; +} + +.x-color-palette em { + display: block; + border: 1px solid; +} + +.x-color-palette em span { + cursor: pointer; + display: block; + height: 10px; + line-height: 10px; + width: 10px; +} + +.x-ie-shadow { + display: none; + position: absolute; + overflow: hidden; + left: 0; + top: 0; + zoom: 1; +} + +.x-shadow { + display: none; + position: absolute; + overflow: hidden; + left: 0; + top: 0; +} + +.x-shadow * { + overflow: hidden; +} + +.x-shadow * { + padding: 0; + border: 0; + margin: 0; + clear: none; + zoom: 1; +} + +.x-shadow .xstc,.x-shadow .xsbc { + height: 6px; + float: left; +} + +.x-shadow .xstl,.x-shadow .xstr,.x-shadow .xsbl,.x-shadow .xsbr { + width: 6px; + height: 6px; + float: left; +} + +.x-shadow .xsc { + width: 100%; +} + +.x-shadow .xsml,.x-shadow .xsmr { + width: 6px; + float: left; + height: 100%; +} + +.x-shadow .xsmc { + float: left; + height: 100%; + background: transparent; +} + +.x-shadow .xst,.x-shadow .xsb { + height: 6px; + overflow: hidden; + width: 100%; +} + +.x-shadow .xsml { + background: transparent repeat-y 0 0; +} + +.x-shadow .xsmr { + background: transparent repeat-y -6px 0; +} + +.x-shadow .xstl { + background: transparent no-repeat 0 0; +} + +.x-shadow .xstc { + background: transparent repeat-x 0 -30px; +} + +.x-shadow .xstr { + background: transparent repeat-x 0 -18px; +} + +.x-shadow .xsbl { + background: transparent no-repeat 0 -12px; +} + +.x-shadow .xsbc { + background: transparent repeat-x 0 -36px; +} + +.x-shadow .xsbr { + background: transparent repeat-x 0 -6px; +} + +.loading-indicator { + background: no-repeat left; + padding-left: 20px; + line-height: 16px; + margin: 3px; +} + +.x-text-resize { + position: absolute; + left: -1000px; + top: -1000px; + visibility: hidden; + zoom: 1; +} + +.x-drag-overlay { + width: 100%; + height: 100%; + display: none; + position: absolute; + left: 0; + top: 0; + background-image: url(../images/default/s.gif); + z-index: 20000; +} + +.x-clear { + clear: both; + overflow: hidden; + line-height: 0; + font-size: 0; +} + +.x-spotlight { + z-index: 8999; + position: absolute; + top: 0; + left: 0; + -moz-opacity: 0.5; + opacity: .50; + filter: alpha(opacity = 50); + width: 0; + height: 0; + zoom: 1; +} + +#x-history-frame { + position: absolute; + top: -1px; + left: 0; + width: 1px; + height: 1px; + visibility: hidden; +} + +#x-history-field { + position: absolute; + top: 0; + left: -1px; + width: 1px; + height: 1px; + visibility: hidden; +} + +.x-portlet { + margin-bottom: 10px; +} + +.x-portlet .x-panel-body { + background-color: white !important; +} + +.ext-ie .x-btn-icon .x-btn-center .x-btn-text { + height: auto; +} + +.x-portal-insert div { + height: 4px; + font-size: 0px; + border: 2px dotted blue; +} + +.icon-wait { + background: url(../images/gxt/icons/wait.gif) no-repeat !important; +} + +.x-panel-icon { + padding-left: 20px !important; +} + +.x-icon-btn { + width: 16px; + height: 16px; + overflow: hidden; + background-repeat: no-repeat; + cursor: pointer; +} + +.x-panel-inline-icon { + margin-top: 0; +} + +.x-modal { + position: absolute; + z-index: 10; + background-color: black; + filter: alpha(opacity = 10); + opacity: .1; + left: 0px; + top: 0px; +} + +.x-progress { + font-family: tahoma, arial, helvetica, sans-serif; +} + +.x-float-right { + float: right; +} + +.x-toolbar .x-float-right { + margin-right: 4px; +} + +.x-border { + border: 1px solid #99BBE8; +} + +.x-border-top { + border-top: 1px solid #99BBE8; +} + +.x-layout-popup { + background-color: #DFE8F6; + border: 1px solid #7CA4D9; +} + +.x-panel-popup-body { + border-top: 1px solid #99BBE8; +} + +.x-layout-collapsed .x-panel-header { + border-left: none; + border-right: none; + border-top: none; +} + +.x-layout-collapsed .x-panel-header .x-tool { + margin: 0 0 0 -4px; + padding: 0px; +} + +.x-layout-collapsed { + position: absolute; + visibility: hidden; + background-color: #d2e0f2; + width: 20px; + height: 20px; + overflow: hidden; + border: 1px solid #98c0f4; + z-index: 20; +} + +.ext-border-box .x-layout-collapsed { + width: 22px; + height: 22px; +} + +.x-layout-collapsed-over { + cursor: pointer; + background-color: #d9e8fb; +} + +.x-layout-collapsed-west .x-layout-collapsed-tools,.x-layout-collapsed-east .x-layout-collapsed-tools { + position: absolute; + top: 0; + left: 0; + width: 20px; + height: 20px; +} + +.x-panel-toolbar { + float: right; +} + +.x-cursor-row-resize { + cursor: n-resize; + cursor: row-resize; +} + +.x-date-picker,.x-date-picker a { + font-size: 11px; +} + +.x-date-days { + table-layout: fixed; + width: 100%; +} + +.x-date-days td { + width: 25px; + border: none; +} + +.x-date-days td span { + display: block; + padding: 2px 7px 2px 2px; +} + +.x-date-days td { + background: #DFECFB url(../images/default/shared/glass-bg.gif) repeat-x scroll left top; + border-bottom: 1px solid #A3BAD9; + border-collapse: separate; + color: #233D6D; + cursor: default; + font-family: arial, helvetica, tahoma, sans-serif; + font-size: 10px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + padding: 0pt; + text-align: right !important; +} + +.x-date-picker .x-date-header { + background: url(../images/default/shared/hd-sprite.gif) repeat-x 0 -83px; + height: 22px; + left: 10px; + top: 10px; + width: 157px; +} + +.x-date-header .x-btn .x-btn-text { + color: #fff; +} + +.x-date-picker-footer { + width: 100%; +} + +.x-date-picker-footer td { + text-align: center; +} + +.x-date-left { + background: transparent url(../images/default/shared/hd-sprite.gif) repeat-x scroll 0pt -83px; + color: #FFFFFF; + font-family: "sans serif", tahoma, verdana, helvetica; + font-size: 11px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: bold; + line-height: normal; + overflow: hidden; +} + +.x-modal { + position: absolute; + z-index: 10; + background-color: black; + filter: alpha(opacity = 10); + opacity: .1; + left: 0px; + top: 0px; +} + +.x-progress { + font-family: tahoma, arial, helvetica, sans-serif; +} + +.x-float-right { + float: right; +} + +.x-layout-popup { + background-color: #DFE8F6; + border: 1px solid #7CA4D9; +} + +.x-layout-collapsed .x-panel-header .x-tool { + margin: 0 0 0 -4px; + padding: 0px; +} + +.ext-border-box .x-layout-collapsed { + width: 22px; + height: 22px; +} + +.x-layout-collapsed-over { + cursor: pointer; + background-color: #d9e8fb; +} + +.x-layout-collapsed-west .x-layout-collapsed-tools,.x-layout-collapsed-east .x-layout-collapsed-tools { + position: absolute; + top: 0; + left: 0; + width: 20px; + height: 20px; +} + +.x-panel-toolbar { + float: right; +} + +.x-cursor-col-resize { + cursor: e-resize; + cursor: col-resize; +} + +.x-cursor-row-resize { + cursor: n-resize; + cursor: row-resize; +} + +.x-drag-proxy { + border: 1px dashed #3b5a82; + background-color: #EDEDED; + filter: alpha(opacity = 50); + opacity: .5; + background-color: #c3daf9; + z-index: 20000; + overflow: hidden; + position: absolute; + left: 0;; + top: 0; + cursor: move; +}.x-tab-panel { + overflow: hidden; + -moz-outline: none; + outline: 0 none; +} + +.x-tab-panel-header,.x-tab-panel-footer { + border: 1px solid; + overflow: hidden; + zoom: 1; +} + +.x-tab-panel-header { + border: 1px solid; + padding-bottom: 2px; +} + +.x-tab-panel-footer { + border: 1px solid; + padding-top: 2px; +} + +.x-tab-strip-wrap { + width: 100%; + overflow: hidden; + position: relative; + zoom: 1; +} + +ul.x-tab-strip { + display: block; + width: 7000px; + zoom: 1; +} + +ul.x-tab-strip-top { + padding-top: 1px; + background: repeat-x bottom; + border-bottom: 1px solid; +} + +ul.x-tab-strip-bottom { + padding-bottom: 1px; + background: repeat-x top; + border-top: 1px solid; + border-bottom: 0 none; +} + +.x-tab-panel-header-plain .x-tab-strip-top { + background: transparent !important; + padding-top: 0 !important; +} + +.x-tab-panel-header-plain { + background: transparent !important; + border-width: 0 !important; + padding-bottom: 0 !important; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer,.x-tab-panel-footer-plain .x-tab-strip-spacer + { + border: 1px solid; + height: 2px; + font-size: 1px; + line-height: 1px; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer { + border-top: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-bottom: 0 none; +} + +.x-tab-panel-footer-plain .x-tab-strip-bottom { + background: transparent !important; + padding-bottom: 0 !important; +} + +.x-tab-panel-footer-plain { + background: transparent !important; + border-width: 0 !important; + padding-top: 0 !important; +} + +.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer,.ext-border-box .x-tab-panel-footer-plain .x-tab-strip-spacer + { + height: 3px; +} + +ul.x-tab-strip li { + float: left; + position: relative; + margin-left: 2px; +} + +ul.x-tab-strip li.x-tab-edge { + float: left; + margin: 0 !important; + padding: 0 !important; + border: 0 none !important; + font-size: 1px !important; + line-height: 1px !important; + overflow: hidden; + zoom: 1; + background: transparent !important; + width: 1px; +} + +.x-tab-strip a,.x-tab-strip span,.x-tab-strip em { + display: block; +} + +.x-tab-strip a { + text-decoration: none !important; + -moz-outline: none; + outline: none; + cursor: pointer; +} + +.x-tab-strip-inner { + overflow: hidden; + text-overflow: ellipsis; +} + +.x-tab-strip span.x-tab-strip-text { + white-space: nowrap; + cursor: pointer; + padding: 4px 0; +} + +.x-tab-strip-top .x-tab-with-icon .x-tab-right { + padding-left: 6px; +} + +.x-tab-strip .x-tab-with-icon span.x-tab-strip-text { + padding-left: 20px; + background-position: 0 3px; + background-repeat: no-repeat; +} + +.x-tab-strip-active,.x-tab-strip-active a.x-tab-right { + cursor: default; +} + +.x-tab-strip-active span.x-tab-strip-text { + cursor: default; +} + +.x-tab-strip-disabled .x-tabs-text { + cursor: default; +} + +.x-tab-panel-body { + overflow: hidden; +} + +.x-tab-panel-bwrap { + overflow: hidden; +} + +.ext-ie .x-tab-strip .x-tab-right { + position: relative; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + margin-bottom: -1px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text + { + padding-bottom: 5px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + margin-top: -1px; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right span.x-tab-strip-text + { + padding-top: 5px; +} + +.x-tab-strip-top .x-tab-right { + background: transparent no-repeat 0 -51px; + padding-left: 10px; +} + +.x-tab-strip-top .x-tab-left { + background: transparent no-repeat right -351px; + padding-right: 10px; +} + +.x-tab-strip-top .x-tab-strip-inner { + background: transparent repeat-x 0 -201px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-right { + background-position: 0 -101px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-left { + background-position: right -401px; +} + +.x-tab-strip-top .x-tab-strip-over .x-tab-strip-inner { + background-position: 0 -251px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-right { + background-position: 0 0; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-left { + background-position: right -301px; +} + +.x-tab-strip-top .x-tab-strip-active .x-tab-strip-inner { + background-position: 0 -151px; +} + +.x-tab-strip-bottom .x-tab-right { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background: no-repeat bottom left; +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background: no-repeat bottom right; +} + +.x-tab-strip-bottom .x-tab-left { + padding: 0 10px; +} + +.x-tab-strip-bottom .x-tab-right { + padding: 0; +} + +.x-tab-strip .x-tab-strip-close { + display: none; +} + +.x-tab-strip-closable { + position: relative; +} + +.x-tab-strip-closable .x-tab-left { + padding-right: 19px; +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + opacity: .6; + -moz-opacity: .6; + background-repeat: no-repeat; + display: block; + width: 11px; + height: 11px; + position: absolute; + top: 3px; + right: 3px; + cursor: pointer; + z-index: 2; +} + +.x-tab-strip .x-tab-strip-active a.x-tab-strip-close { + opacity: .8; + -moz-opacity: .8; +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover { + opacity: 1; + -moz-opacity: 1; +} + +.x-tab-panel-body { + border: 1px solid; +} + +.x-tab-panel-body-top { + border-top: 0 none; +} + +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} + +.x-tab-scroller-left { + background: transparent no-repeat -18px 0; + border-bottom: 1px solid; + width: 18px; + position: absolute; + left: 0; + top: 0; + z-index: 10; + cursor: pointer; +} + +.x-tab-scroller-left-over { + background-position: 0 0; +} + +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity: .5; + -moz-opacity: .5; + filter: alpha(opacity = 50); + cursor: default; +} + +.x-tab-scroller-right { + background: transparent no-repeat 0 0; + border-bottom: 1px solid; + width: 18px; + position: absolute; + right: 0; + top: 0; + z-index: 10; + cursor: pointer; +} + +.x-tab-scroller-right-over { + background-position: -18px 0; +} + +.x-tab-scroller-right-disabled { + background-position: 0 0; + opacity: .5; + -moz-opacity: .5; + filter: alpha(opacity = 50); + cursor: default; +} + +.x-tab-scrolling-bottom .x-tab-scroller-left,.x-tab-scrolling-bottom .x-tab-scroller-right + { + margin-top: 1px; +} + +.x-tab-scrolling .x-tab-strip-wrap { + margin-left: 18px; + margin-right: 18px; +} + +.x-tab-scrolling { + position: relative; +} + +.x-tab-panel-bbar .x-toolbar { + border: 1px solid; + border-top: 0 none; + overflow: hidden; + padding: 2px; +} + +.x-tab-panel-tbar .x-toolbar { + border: 1px solid; + border-top: 0 none; + overflow: hidden; + padding: 2px; +} + +.x-tab-strip li .x-tab-image { + position: absolute; + top: 3px; + left: 5px; +} + +.ext-ie8 .x-tab-strip li .x-tab-image,.ext-ie8-compatibility .x-tab-strip li .x-tab-image { + top: 4px; + left: 6px; +} + +.ext-ie8 .x-tab-strip-top .x-tab-right,.ext-ie8-compatibility .x-tab-strip-top .x-tab-right + { + top: 1px; +} + +.ext-strict .ext-ie8 .x-tab-strip-top .x-tab-right,.ext-ie8 .x-tab-panel-header-plain .x-tab-strip-top .x-tab-right,.ext-ie8-compatibility .x-tab-panel-header-plain .x-tab-strip-top .x-tab-right + { + top: 0; +} +.ext-strict .ext-ie7 .x-panel-body { + position: relative !important; +} + +.x-form-field { + margin: 0; +} + +.foo { + padding: 1px; +} + +.foo { + margin: 4px; +} + +.x-form-text,textarea.x-form-field { + padding: 1px 3px; + background: repeat-x 0 0; + border: 1px solid; +} + +.ext-gecko textarea.x-form-field { + padding: 0; +} + +.x-form-text,.ext-ie .x-form-file { + height: 22px; + line-height: 18px; + vertical-align: middle; +} + +.ext-ie6 .x-form-text,.ext-ie7 .x-form-text { + margin: -1px 0; + height: 22px; /* ie quirks */ + line-height: 18px; +} + +.ext-ie8-compatibility .x-form-text { + margin: 0; +} + +.ext-ie textarea.x-form-field { + margin: -1px 0; /* ie bogus margin bug */ +} + +.ext-strict .ext-ie8 textarea.x-form-field,.ext-strict .ext-ie8-compatibility textarea.x-form-field { + margin: 0; +} + +.x-form-field-wrap .x-form-text { + position: relative; +} + +.ext-strict .x-form-text { + height: 18px; +} + +.ext-safari.ext-mac textarea.x-form-field { + margin-bottom: -2px; +} + +.ext-gecko .x-form-text,.ext-ie8 .x-form-text { + padding-top: 2px; + padding-bottom: 0; +} + +textarea { + resize: none; +} + +.x-form-select-one { + height: 20px; + line-height: 18px; + vertical-align: middle; + border: 1px solid; +} + +.x-form-check-wrap { + line-height: 18px; + height: 22px; + white-space: nowrap; +} + +.x-editor .x-form-check-wrap { + border: 1px solid; + padding: 2px; + height: 14px; +} + +.x-editor .x-form-checkbox { + height: 13px; +} + +.x-form-check-group-label { + border-bottom: 1px solid; + margin-bottom: 5px; + padding-left: 3px !important; + float: none !important; +} + +.x-form-field-wrap .x-form-trigger { + width: 17px; + height: 21px; + border: 0; + background: transparent no-repeat 0 0; + cursor: pointer; + border-bottom: 1px solid; + position: absolute; + top: 0; +} + +.ext-safari .x-form-field-wrap .x-form-trigger { + height: 21px; +} + +.ext-strict .ext-safari .x-form-field-wrap .x-form-trigger { + height: 23px; +} + +.ext-strict .ext-safari .x-small-editor .x-form-field-wrap .x-form-trigger { + height: 19px; +} + +.ext-strict .ext-ie8 .x-small-editor .x-form-field-wrap .x-form-trigger { + height: 20px !important; +} + +.ext-strict .ext-gecko .x-small-editor .x-form-field-wrap .x-form-trigger { + height: 21px !important; +} + +.x-form-field-wrap .x-form-date-trigger,.x-form-field-wrap .x-form-clear-trigger,.x-form-field-wrap .x-form-search-trigger + { + cursor: pointer; +} + +.ext-safari .x-form-field-wrap .x-form-trigger,.ext-gecko .x-form-field-wrap .x-form-trigger { + right: 0; +} + +.x-form-field-wrap .x-form-twin-triggers .x-form-trigger { + position: static; + top: auto; + vertical-align: top; +} + +.x-form-field-wrap { + position: relative; + left: 0; + top: 0; + zoom: 1; + white-space: nowrap; + text-align: left; +} + +.x-form-field-wrap .x-form-trigger-over { + background-position: -17px 0; +} + +.x-form-field-wrap .x-form-trigger-click { + background-position: -34px 0; +} + +.x-trigger-wrap-focus .x-form-trigger { + background-position: -51px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-over { + background-position: -68px 0; +} + +.x-trigger-wrap-focus .x-form-trigger-click { + background-position: -85px 0; +} + +.x-trigger-wrap-focus .x-form-trigger { + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-over { + background-position: 0 0 !important; + border-bottom: 1px solid; +} + +.x-item-disabled .x-form-trigger-click { + background-position: 0 0 !important; + border-bottom: 1px solid; +} + +.x-form-focus,textarea.x-form-focus { + border: 1px solid; +} + +.x-form-invalid,textarea.x-form-invalid { + background: repeat-x bottom; + border: 1px solid; +} + +.ext-safari .x-form-invalid { + border: 1px solid; +} + +.x-form-inner-invalid,textarea.x-form-inner-invalid { + background: repeat-x bottom; +} + +.x-editor { + padding: 0; + margin: 0; +} + +.x-form-grow-sizer { + left: -10000px; + padding: 8px 3px; + position: absolute; + visibility: hidden; + top: -10000px; + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + word-wrap: break-word; + zoom: 1; +} + +.x-form-grow-sizer p { + margin: 0 !important; + border: 0 none !important; + padding: 0 !important; +} + +.x-form-item { + display: block; + margin-bottom: 4px; +} + +.x-form-item .x-form-item-label { + display: block; + float: left; + width: 100px; + padding: 3px; + padding-left: 0; + clear: left; + z-index: 2; + position: relative; +} + +.x-form-element { + padding-left: 105px; + position: relative; +} + +.x-form-invalid-msg { + padding: 2px; + padding-left: 18px; + background: transparent no-repeat 0 2px; + line-height: 16px; + width: 200px; +} + +.x-form-label-left .x-form-item-label { + text-align: left; +} + +.x-form-label-right .x-form-item-label { + text-align: right; +} + +.x-form-label-top .x-form-item .x-form-item-label { + width: auto; + float: none; + clear: none; + display: inline; + margin-bottom: 4px; + position: static; +} + +.x-form-label-top .x-form-element { + padding-left: 0; + padding-top: 4px; +} + +.x-form-label-top .x-form-item { + padding-bottom: 4px; +} + +.x-small-editor .x-form-text { + height: 20px; + line-height: 16px; + vertical-align: middle; +} + +.ext-ie6 .x-small-editor .x-form-text,.ext-ie7 .x-small-editor .x-form-text { + height: 20px !important; + line-height: 16px !important; +} + +.ext-strict .x-small-editor .x-form-text { + height: 16px !important; +} + +.ext-strict .ext-ie8 .x-small-editor .x-form-text { + height: 17px !important; +} + +.ext-strict .ext-webkit .x-small-editor .x-form-text { + height: 18px !important; + padding: 0px 3px; +} + +.ext-strict .ext-gecko .x-small-editor .x-form-text { + height: 18px !important; +} + +.ext-strict .ext-gecko .x-edit-grid .x-small-editor .x-form-text { + height:17px !important; +} + +.ext-border-box .x-small-editor .x-form-text { + height: 20px; +} + +.x-small-editor .x-form-select-one { + height: 20px; + line-height: 16px; + vertical-align: middle; +} + +.x-small-editor .x-form-num-field { + text-align: right; +} + +.x-small-editor .x-form-field-wrap .x-form-trigger { + height: 19px; +} + +.x-form-clear { + clear: both; + overflow: hidden; + line-height: 0; + font-size: 0; + height: 0; +} + +.x-form-clear-left { + clear: left; + overflow: hidden; + line-height: 0; + font-size: 0; + height: 0; +} + +.x-form-cb-label { + width: auto !important; + float: none !important; + clear: none !important; + display: inline !important; + margin-left: 4px; +} + +.x-form-column { + float: left; + padding: 0; + margin: 0; + width: 48%; + overflow: hidden; + zoom: 1; +} + +.x-form .x-form-btns-ct .x-btn { + float: right; + clear: none; +} + +.x-form .x-form-btns-ct .x-form-btns td { + border: 0; + padding: 0; +} + +.x-form .x-form-btns-ct .x-form-btns-right table { + float: right; + clear: none; +} + +.x-form .x-form-btns-ct .x-form-btns-left table { + float: left; + clear: none; +} + +.x-form .x-form-btns-ct .x-form-btns-center { + text-align: center; +} + +.x-form .x-form-btns-ct .x-form-btns-center table { + margin: 0 auto; +} + +.x-form .x-form-btns-ct table td.x-form-btn-td { + padding: 3px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-left { + background-position: 0 -147px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-right { + background-position: 0 -168px; +} + +.x-form .x-form-btns-ct .x-btn-focus .x-btn-center { + background-position: 0 -189px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-center { + background-position: 0 -126px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-right { + background-position: 0 -84px; +} + +.x-form .x-form-btns-ct .x-btn-click .x-btn-left { + background-position: 0 -63px; +} + +.x-form-invalid-icon { + width: 16px; + height: 18px; + position: absolute; + left: 0; + top: 0; + display: block; + background: transparent no-repeat 0 2px; +} + +.x-fieldset { + border: 1px solid; + padding: 10px; + margin-bottom: 10px; + display: block; +} + +.ext-ie .x-fieldset legend { + margin-bottom: 10px; +} + +.ext-ie .x-fieldset { + padding-top: 0; + padding-bottom: 10px; +} + +.x-fieldset legend .x-tool-toggle { + margin-right: 3px; + margin-left: 0; + float: left !important; +} + +.x-fieldset legend input { + margin-right: 3px; + float: left !important; + height: 13px; + width: 13px; +} + +fieldset.x-panel-collapsed { + padding-bottom: 0 !important; + border-width: 1px 1px 0 1px !important; + border-left-color: transparent; + border-right-color: transparent; +} + +.ext-ie6 fieldset.x-panel-collapsed { + padding-bottom: 0 !important; + border-width: 1px 0 0 0 !important; + margin-left: 1px; + margin-right: 1px; +} + +fieldset.x-panel-collapsed .x-fieldset-bwrap { + visibility: hidden; + position: absolute; + left: -1000px; + top: -1000px; +} + +.ext-ie .x-fieldset-bwrap { + zoom: 1; +} + +.x-fieldset-noborder { + border: 0px none transparent; +} + +.x-fieldset-noborder legend { + margin-left: -3px; +} + +.ext-ie .x-fieldset-noborder legend { + position: relative; + margin-bottom: 23px; +} + +.ext-ie .x-fieldset-noborder legend span { + position: absolute; + left: 16px; +} + +.ext-gecko .x-form-item { + -moz-outline: none; + outline: 0 none; +} + +.x-hide-label label.x-form-item-label { + display: none !important; +} + +.x-hide-label .x-form-element { + padding-left: 0 !important; +} + +.x-fieldset { + overflow: hidden; +} + +/* make top of checkbox/tools visible in webkit */ +.ext-webkit .x-fieldset-header, .ext-ie .x-fieldset-header { + padding-top: 1px; +} + +.x-fieldset-bwrap { + overflow: hidden; + zoom: 1; +} + +.x-fieldset-body { + overflow: hidden; +} + +.x-combo-list .x-combo-selected { + border-color: #a3bae9 !important; +} + +.x-combo-list { + background-color: white !important; +} + +.ext-gecko .x-form-file { + height: inherit !important; +} + +.x-form-check { + background: none !important +} + +.x-form-radio { + background: none !important +} + +.x-form-label { + padding: 2px 3px 3px 0px; + font-size: 12px; +} + +.x-form-label-top .x-form-item { + padding-bottom: 0px; + margin-bottom: 2px; +} + +.ext-safari .x-form-text { + height: 22px; /* safari always same size */ + padding: 0 3px; + /* remove extra top/bottom padding */ +} + +.ext-safari .x-small-editor .x-form-text { + height: 20px; +} + +.x-form-group-label,.x-form-cb-label { + font: normal 12px tahoma, arial, helvetica, sans-serif; + padding-right: 10px; +} + +.x-form-list { + background: #FFFFFF url(../images/default/form/text-bg.gif) repeat-x scroll 0 0; + border: 1px solid #B5B8C8; +} + +/* + * FileUploadField component styles + */ +.x-form-file-wrap { + height: 22px; +} + +.x-form-file-wrap .x-form-file { + position: absolute; + right: 0; + -moz-opacity: 0; + filter: alpha(opacity : 0); + opacity: 0; + z-index: 2; + height: 22px; + top: 0; +} + +.x-form-file-wrap .x-form-file-btn { + position: absolute; + right: 0; + z-index: 1; + top: 0; +} + +.x-form-file-wrap .x-form-file-text { + z-index: 3; + color: #777; +} + +.x-form-invalid-icon { + background-position: 0 0 !important; +} + +.x-triggerfield-noedit { + cursor: pointer; +} + +.ext-webkit .x-form-checkbox:focus { + outline: auto !important; +} + +.x-spinner-field .x-form-twin-triggers .x-form-spinner-up, .x-spinner-field .x-form-twin-triggers .x-form-spinner-down { + height: 10px; + position: absolute; +} + +.ext-strict .ext-safari .x-form-field-wrap .x-form-spinner-up { + height: 10px; +} + +.ext-strict .ext-safari .x-form-field-wrap .x-form-spinner-down { + height: 12px; +} + +.x-spinner-field .x-form-twin-triggers .x-form-spinner-up { + top:0px; +} + +.x-spinner-field .x-form-twin-triggers .x-form-spinner-down { + top:11px; +} + +.x-spinner-field .x-form-twin-triggers { + width: 17px; +} + +.x-spinner-field .x-form-spinner-down { + background-position:0 -12px; +} + +.x-trigger-wrap-focus .x-form-spinner-up { + background-position:-85px 0; +} + +.x-trigger-wrap-focus .x-form-spinner-down { + background-position:-85px -12px; +} + +.x-form-field-wrap .x-form-spinner-overup{ + background-position:-17px 0; +} +.x-form-field-wrap .x-form-spinner-clickup{ + background-position:-34px 0; +} + +.x-trigger-wrap-focus .x-form-spinner-overup{ + background-position:-102px 0; +} + +.x-trigger-wrap-focus .x-form-spinner-clickup{ + background-position:-119px 0; +} + +.x-form-field-wrap .x-form-spinner-overdown{ + background-position:-51px -12px; +} +.x-form-field-wrap .x-form-spinner-clickdown{ + background-position:-68px -12px; +} +.x-trigger-wrap-focus .x-form-spinner-overdown{ + background-position:-136px -12px; +} +.x-trigger-wrap-focus .x-form-spinner-clickdown{ + background-position:-153px -12px; +}.x-btn{ + cursor:pointer; + white-space: nowrap; +} +.x-btn button{ + border:0 none; + background:transparent; + padding-left:3px; + padding-right:3px; + cursor:pointer; + margin:0; + overflow:hidden; + width:auto; + -moz-outline:0 none; + outline:0 none; +} +* html .ext-ie .x-btn button { + width:1px; +} +.ext-ie .x-item-disabled .x-btn-mc img { + filter: alpha(opacity=60); +} +.ext-gecko .x-btn button,.ext-webkit .x-btn button { + padding-left:0; + padding-right:0; +} +.ext-gecko .x-btn button::-moz-focus-inner { + padding:0; +} +.ext-ie .x-btn button { + padding-top:2px; +} +.x-btn td { + padding:0 !important; +} +.x-btn-text { + cursor:pointer; + white-space: nowrap; + padding:0; +} +.x-btn-noicon .x-btn-small .x-btn-text{ + height: 16px; +} +.x-btn-noicon .x-btn-medium .x-btn-text{ + height: 24px; +} +.x-btn-noicon .x-btn-large .x-btn-text{ + height: 32px; +} +.x-btn-icon .x-btn-text{ + background-position: center; + background-repeat: no-repeat; +} +.x-btn-icon .x-btn-small .x-btn-text{ + height: 16px; + width: 16px; +} +.x-btn-icon .x-btn-medium .x-btn-text{ + height: 24px; + width: 24px; +} +.x-btn-icon .x-btn-large .x-btn-text{ + height: 32px; + width: 32px; +} +.x-btn-text-icon .x-btn-icon-small-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:18px; + height:16px; +} +.x-btn-text-icon .x-btn-icon-medium-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:26px; + height:24px; +} +.x-btn-text-icon .x-btn-icon-large-left .x-btn-text{ + background-position: 0 center; + background-repeat: no-repeat; + padding-left:34px; + height:32px; +} +.x-btn-text-icon .x-btn-icon-small-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:18px; +} +.x-btn-text-icon .x-btn-icon-medium-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:26px; +} +.x-btn-text-icon .x-btn-icon-large-top .x-btn-text{ + background-position: center 0; + background-repeat: no-repeat; + padding-top:34px; +} +.x-btn-text-icon .x-btn-icon-small-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:18px; + height:16px; +} +.x-btn-text-icon .x-btn-icon-medium-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:26px; + height:24px; +} +.x-btn-text-icon .x-btn-icon-large-right .x-btn-text{ + background-position: right center; + background-repeat: no-repeat; + padding-right:34px; + height:32px; +} +.x-btn-text-icon .x-btn-icon-small-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:18px; +} +.x-btn-text-icon .x-btn-icon-medium-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:26px; +} +.x-btn-text-icon .x-btn-icon-large-bottom .x-btn-text{ + background-position: center bottom; + background-repeat: no-repeat; + padding-bottom:34px; +} +.x-btn-tr i, .x-btn-tl i, .x-btn-mr i, .x-btn-ml i, .x-btn-br i, .x-btn-bl i{ + font-size:1px; + line-height:1px; + width:3px; + display:block; + overflow:hidden; +} +.x-btn-tr i, .x-btn-tl i, .x-btn-br i, .x-btn-bl i{ + height:3px; +} +.x-btn-tl{ + width:3px; + height:3px; + background:no-repeat 0 0; +} +.x-btn-tr{ + width:3px; + height:3px; + background:no-repeat -3px 0; +} +.x-btn-tc{ + height:3px; + background:repeat-x 0 -6px; +} +.x-btn-ml{ + width:3px; + background:no-repeat 0 -24px; +} +.x-btn-mr{ + width:3px; + background:no-repeat -3px -24px; +} +.x-btn-mc{ + background:repeat-x 0 -1096px; + vertical-align: middle; + text-align:center; + padding:0 5px; + cursor:pointer; + white-space:nowrap; +} +.x-btn-bl{ + width:3px; + height:3px; + background:no-repeat 0 -3px; +} +.x-btn-br{ + width:3px; + height:3px; + background:no-repeat -3px -3px; +} +.x-btn-bc{ + height:3px; + background:repeat-x 0 -15px; +} +.x-btn-over .x-btn-tl{ + background-position: -6px 0; +} +.x-btn-over .x-btn-tr{ + background-position: -9px 0; +} +.x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} +.x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} +.x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} +.x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} +.x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} +.x-btn-over .x-btn-br{ + background-position: -9px -3px; +} +.x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} +.ext-webkit .x-btn-focus .x-btn-tl{ + background-position: -6px 0; +} +.ext-webkit .x-btn-focus .x-btn-tr{ + background-position: -9px 0; +} +.ext-webkit .x-btn-focus .x-btn-tc{ + background-position: 0 -9px; +} +.ext-webkit .x-btn-focus .x-btn-ml{ + background-position: -6px -24px; +} +.ext-webkit .x-btn-focus .x-btn-mr{ + background-position: -9px -24px; +} +.ext-webkit .x-btn-focus .x-btn-mc{ + background-position: 0 -2168px; +} +.ext-webkit .x-btn-focus .x-btn-bl{ + background-position: -6px -3px; +} +.ext-webkit .x-btn-focus .x-btn-br{ + background-position: -9px -3px; +} +.ext-webkit .x-btn-focus .x-btn-bc{ + background-position: 0 -18px; +} +.x-btn-click .x-btn-tl, .x-btn-menu-active .x-btn-tl, .x-btn-pressed .x-btn-tl{ + background-position: -12px 0 !important; +} +.x-btn-click .x-btn-tr, .x-btn-menu-active .x-btn-tr, .x-btn-pressed .x-btn-tr{ + background-position: -15px 0 !important; +} +.x-btn-click .x-btn-tc, .x-btn-menu-active .x-btn-tc, .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px !important; +} +.x-btn-click .x-btn-ml, .x-btn-menu-active .x-btn-ml, .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px !important; +} +.x-btn-click .x-btn-mr, .x-btn-menu-active .x-btn-mr, .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px !important; +} +.x-btn-click .x-btn-mc, .x-btn-menu-active .x-btn-mc, .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px !important; +} +.x-btn-click .x-btn-bl, .x-btn-menu-active .x-btn-bl, .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px !important; +} +.x-btn-click .x-btn-br, .x-btn-menu-active .x-btn-br, .x-btn-pressed .x-btn-br{ + background-position: -15px -3px !important; +} +.x-btn-click .x-btn-bc, .x-btn-menu-active .x-btn-bc, .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px !important; +} +.x-btn-disabled *{ + cursor:default !important; +} +.x-btn-mc em.x-btn-arrow { + display:block; + background:transparent no-repeat right center; + padding-right:10px; +} +.x-btn-mc em.x-btn-split { + display:block; + background:transparent no-repeat right center; + padding-right:14px; +} +.x-btn-mc em.x-btn-arrow-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} +.x-btn-mc em.x-btn-split-bottom { + display:block; + background:transparent no-repeat center bottom; + padding-bottom:14px; +} +.x-btn-as-arrow .x-btn-mc em { + display:block; + background:transparent; + padding-bottom:14px; +} +.x-btn-group { + padding:1px; +} +.x-btn-group-header { + padding:2px; + text-align:center; +} +.x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} +.x-btn-group-tl { + background: transparent no-repeat 0 0; + padding-left:3px; + zoom:1; +} +.x-btn-group-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:3px; +} +.x-btn-group-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} +.x-btn-group-bc .x-panel-footer { + zoom:1; +} +.x-btn-group-bl { + background: transparent no-repeat 0 bottom; + padding-left:3px; + zoom:1; +} +.x-btn-group-br { + background: transparent no-repeat right bottom; + padding-right:3px; + zoom:1; +} +.x-btn-group-mc { + border:0 none; + padding:1px 0 0 0; + margin:0; +} +.x-btn-group-mc .x-btn-group-body { + background:transparent; + border: 0 none; +} +.x-btn-group-ml { + background: transparent repeat-y 0 0; + padding-left:3px; + zoom:1; +} +.x-btn-group-mr { + background: transparent repeat-y right 0; + padding-right:3px; + zoom:1; +} +.x-btn-group-bc .x-btn-group-footer { + padding-bottom:6px; +} +.x-panel-nofooter .x-btn-group-bc { + height:3px; + font-size:0; + line-height:0; +} +.x-btn-group-bwrap { + overflow:hidden; + zoom:1; +} +.x-btn-group-body { + overflow:hidden; + zoom:1; +} +.x-btn-group-notitle .x-btn-group-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + height:2px; +} +.x-toolbar{ + border-style:solid; + border-width:0 0 1px 0; + display: block; + padding:2px; + background:repeat-x top left; + position:relative; + left:0; + top:0; + zoom:1; + overflow:hidden; +} +.x-toolbar .x-item-disabled .x-btn-icon { + opacity: .35; + -moz-opacity: .35; + filter: alpha(opacity=35); +} +.x-toolbar td { + vertical-align:middle; +} +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{ + white-space: nowrap; +} +.x-toolbar .x-item-disabled { + cursor:default; + opacity:.6; + -moz-opacity:.6; + filter:alpha(opacity=60); +} + +.x-toolbar .x-item-disabled *{ + cursor:default; +} + +.x-toolbar .x-toolbar-cell { + vertical-align:middle; +} +.x-toolbar .x-btn-tl, .x-toolbar .x-btn-tr, .x-toolbar .x-btn-tc, .x-toolbar .x-btn-ml, .x-toolbar .x-btn-mr, +.x-toolbar .x-btn-mc, .x-toolbar .x-btn-bl, .x-toolbar .x-btn-br, .x-toolbar .x-btn-bc +{ + background-position: 500px 500px; +} +.x-toolbar .x-btn-over .x-btn-tl{ + background-position: -6px 0; +} +.x-toolbar .x-btn-over .x-btn-tr{ + background-position: -9px 0; +} +.x-toolbar .x-btn-over .x-btn-tc{ + background-position: 0 -9px; +} +.x-toolbar .x-btn-over .x-btn-ml{ + background-position: -6px -24px; +} +.x-toolbar .x-btn-over .x-btn-mr{ + background-position: -9px -24px; +} +.x-toolbar .x-btn-over .x-btn-mc{ + background-position: 0 -2168px; +} +.x-toolbar .x-btn-over .x-btn-bl{ + background-position: -6px -3px; +} +.x-toolbar .x-btn-over .x-btn-br{ + background-position: -9px -3px; +} +.x-toolbar .x-btn-over .x-btn-bc{ + background-position: 0 -18px; +} +.x-toolbar .x-btn-click .x-btn-tl, .x-toolbar .x-btn-menu-active .x-btn-tl, .x-toolbar .x-btn-pressed .x-btn-tl{ + background-position: -12px 0; +} +.x-toolbar .x-btn-click .x-btn-tr, .x-toolbar .x-btn-menu-active .x-btn-tr, .x-toolbar .x-btn-pressed .x-btn-tr{ + background-position: -15px 0; +} +.x-toolbar .x-btn-click .x-btn-tc, .x-toolbar .x-btn-menu-active .x-btn-tc, .x-toolbar .x-btn-pressed .x-btn-tc{ + background-position: 0 -12px; +} +.x-toolbar .x-btn-click .x-btn-ml, .x-toolbar .x-btn-menu-active .x-btn-ml, .x-toolbar .x-btn-pressed .x-btn-ml{ + background-position: -12px -24px; +} +.x-toolbar .x-btn-click .x-btn-mr, .x-toolbar .x-btn-menu-active .x-btn-mr, .x-toolbar .x-btn-pressed .x-btn-mr{ + background-position: -15px -24px; +} +.x-toolbar .x-btn-click .x-btn-mc, .x-toolbar .x-btn-menu-active .x-btn-mc, .x-toolbar .x-btn-pressed .x-btn-mc{ + background-position: 0 -3240px; +} +.x-toolbar .x-btn-click .x-btn-bl, .x-toolbar .x-btn-menu-active .x-btn-bl, .x-toolbar .x-btn-pressed .x-btn-bl{ + background-position: -12px -3px; +} +.x-toolbar .x-btn-click .x-btn-br, .x-toolbar .x-btn-menu-active .x-btn-br, .x-toolbar .x-btn-pressed .x-btn-br{ + background-position: -15px -3px; +} +.x-toolbar .x-btn-click .x-btn-bc, .x-toolbar .x-btn-menu-active .x-btn-bc, .x-toolbar .x-btn-pressed .x-btn-bc{ + background-position: 0 -21px; +} +.x-toolbar div.xtb-text{ + padding:2px 2px 0; + line-height:16px; + display:block; +} +.x-toolbar .xtb-sep { + background-position: center; + background-repeat: no-repeat; + display: block; + font-size: 1px; + height: 16px; + width:4px; + overflow: hidden; + cursor:default; + margin: 0 2px 0; + border:0; +} +.x-toolbar .xtb-spacer { + width:2px; +} +.x-tbar-page-number{ + width:24px; + height:14px; +} +.x-paging-info { + position:absolute; + top:5px; + right: 8px; +} +.x-toolbar-ct { + width:100%; +} +.x-panel-tbar, .x-panel-bbar, .x-window-tbar, .x-window-bbar, .x-tab-panel-tbar, .x-tab-panel-bbar, .x-plain-tbar, .x-plain-bbar { + overflow:hidden; + zoom:1; +} +.x-toolbar-more .x-btn-small .x-btn-text{ + height: 16px; + width: 12px; +} +.x-toolbar-more em.x-btn-arrow { + display:inline; + background:transparent; + padding-right:0; +} +.x-toolbar-more .x-btn-mc em.x-btn-arrow { + background-image: none; +} +div.x-toolbar-no-items { + color:gray !important; + padding:5px 10px !important; +}.x-resizable-handle { + position:absolute; + z-index:100; + font-size:1px; + line-height:6px; + overflow:hidden; + filter:alpha(opacity=0); + opacity:0; + zoom:1; +} +.x-resizable-handle-east{ + width:6px; + cursor:e-resize; + right:0; + top:0; + height:100%; +} +.ext-ie .x-resizable-handle-east { + margin-right:-1px; +} +.x-resizable-handle-south{ + width:100%; + cursor:s-resize; + left:0; + bottom:0; + height:6px; +} +.ext-ie .x-resizable-handle-south { + margin-bottom:-1px; +} +.x-resizable-handle-west{ + width:6px; + cursor:w-resize; + left:0; + top:0; + height:100%; +} +.x-resizable-handle-north{ + width:100%; + cursor:n-resize; + left:0; + top:0; + height:6px; +} +.x-resizable-handle-southeast{ + width:6px; + cursor:se-resize; + right:0; + bottom:0; + height:6px; + z-index:101; +} +.x-resizable-handle-northwest{ + width:6px; + cursor:nw-resize; + left:0; + top:0; + height:6px; + z-index:101; +} +.x-resizable-handle-northeast{ + width:6px; + cursor:ne-resize; + right:0; + top:0; + height:6px; + z-index:101; +} +.x-resizable-handle-southwest{ + width:6px; + cursor:sw-resize; + left:0; + bottom:0; + height:6px; + z-index:101; +} +.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{ + filter:alpha(opacity=100); + opacity:1; +} +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-position: left; +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-position: top; +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-position: top left; +} +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-position:bottom right; +} +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-position: bottom left; +} +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-position: top right; +} +.x-resizable-proxy{ + border: 1px dashed; + position:absolute; + overflow:hidden; + display:none; + left:0; + top:0; + z-index:50000; +} +.x-resizable-overlay{ + width:100%; + height:100%; + display:none; + position:absolute; + left:0; + top:0; + z-index:200000; + -moz-opacity: 0; + opacity:0; + filter: alpha(opacity=0); +} +.x-grid3 { + position: relative; + overflow: hidden; +} + +.x-grid-panel { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.x-grid-panel .x-panel-body { + overflow: hidden !important; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border: 1px solid; +} + +.x-grid3 .x-grid3-row-table, .x-grid3 .x-grid3-summary-table { + table-layout: fixed; +} + +.x-grid3-viewport { + overflow: hidden; +} + +.x-grid3-hd-row .x-grid3-hd,.x-grid3-row .x-grid3-hd,.x-grid3-summary-row .x-grid3-hd { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.x-grid3-summary-row { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore; + outline: 0 none; +} + +.x-grid3-row td.x-grid3-cell,.x-grid3-summary-row td.x-grid3-cell { + line-height: 14px; + vertical-align: top; + padding-left: 1px; + padding-right: 1px; + -moz-outline: none; + outline: 0 none; +} + +.x-grid3-hd-row .x-grid3-hd { + line-height: 15px; + vertical-align: middle; + border-left: 1px solid; + border-right: 1px solid; +} + +.x-grid3-hd-row .x-grid3-marker-hd { + padding: 3px; +} + +.x-grid3-row .x-grid3-marker { + padding: 3px; +} + +.x-grid3-cell-inner,.x-grid3-hd-inner { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + padding: 3px 3px 3px 5px; + white-space: nowrap; +} + +.x-grid3-hd-inner { + position: relative; + cursor: inherit; + padding: 4px 3px 4px 5px; + vertical-align: middle; +} + +.x-grid3-row-body { + white-space: normal; + font-size: 11px; +} + +.x-grid3-body-cell { + -moz-outline: 0 none; + outline: 0 none; +} + +.ext-ie .x-grid3-cell-inner,.ext-ie .x-grid3-hd-inner { + width: 100%; +} + +.ext-strict .x-grid3-cell-inner,.ext-strict .x-grid3-hd-inner { + width: auto; +} + +.x-grid-row-loading { + background: no-repeat center center; +} + +.x-grid-page { + overflow: hidden; +} + +.x-grid3-row { + cursor: default; + border: 1px solid; + width: 100%; +} + +.x-grid3-row-over { + border: 1px solid; + background: repeat-x left top; +} + +.x-grid3-resize-proxy { + width: 1px; + left: 0; + cursor: e-resize; + cursor: col-resize; + position: absolute; + top: 0; + height: 100px; + overflow: hidden; + visibility: hidden; + border: 0 none; + z-index: 7; +} + +.x-grid3-resize-marker { + width: 1px; + left: 0; + position: absolute; + top: 0; + height: 100px; + overflow: hidden; + visibility: hidden; + border: 0 none; + z-index: 7; +} + +.x-grid3-focus { + position: absolute; + left: 0; + top: 0; + width: 1px; + height: 1px; + line-height: 1px; + font-size: 1px; + -moz-outline: 0 none; + outline: 0 none; + -moz-user-select: text; + -khtml-user-select: text; + -webkit-user-select: ignore; +} + +.x-grid3-header { + background: repeat-x 0 bottom; + cursor: default; + zoom: 1; + padding: 0px 0 0 0; +} + +.x-grid3-header-pop { + border-left: 1px solid; + float: right; + clear: none; +} + +.x-grid3-header-pop-inner { + border-left: 1px solid; + width: 14px; + height: 19px; + background: transparent no-repeat center center; +} + +.ext-ie .x-grid3-header-pop-inner { + width: 15px; +} + +.ext-strict .x-grid3-header-pop-inner { + width: 14px; +} + +.x-grid3-header-inner { + overflow: hidden; + zoom: 1; + float: left; +} + +.x-grid3-header-offset { + padding-left: 1px; +} + +td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open { + border-left: 1px solid; + border-right: 1px solid; +} + +td.x-grid3-hd-over .x-grid3-hd-inner,td.sort-desc .x-grid3-hd-inner,td.sort-asc .x-grid3-hd-inner,td.x-grid3-hd-menu-open .x-grid3-hd-inner + { + background: repeat-x left bottom; +} + +.x-grid3-sort-icon { + background-repeat: no-repeat; + display: none; + height: 4px; + width: 13px; + margin-left: 3px; + vertical-align: middle; +} + +.sort-asc .x-grid3-sort-icon,.sort-desc .x-grid3-sort-icon { + display: inline; +} + +.ext-strict .ext-ie .x-grid3-header-inner,.ext-strict .ext-ie6 .x-grid3-hd { + position: relative; +} + +.ext-strict .ext-ie6 .x-grid3-hd-inner { + position: static; +} + +.x-grid3-body { + zoom: 1; +} + +.x-grid3-scroller { + overflow: auto; + zoom: 1; + position: relative; +} + +.x-grid3-cell-text,.x-grid3-hd-text { + display: block; + padding: 3px 5px 3px 5px; +} + +.x-grid3-split { + background-position: center; + background-repeat: no-repeat; + cursor: e-resize; + cursor: col-resize; + display: block; + font-size: 1px; + height: 16px; + overflow: hidden; + position: absolute; + top: 2px; + width: 6px; + z-index: 3; +} + +.x-dd-drag-proxy .x-grid3-hd-inner { + background: repeat-x left bottom; + width: 120px; + padding: 3px; + border: 1px solid; + overflow: hidden; +} + +.col-move-top,.col-move-bottom { + width: 9px; + height: 9px; + position: absolute; + top: 0; + line-height: 1px; + font-size: 1px; + overflow: hidden; + visibility: hidden; + z-index: 20000; + background: transparent no-repeat left top; +} + +.x-grid3-row-selected { + border: 1px dotted; +} + +.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker { + background: repeat-x 0 bottom !important; + vertical-align: middle !important; + padding: 0; + border-top: 1px solid; + border-bottom: none !important; + border-right: 1px solid !important; + text-align: center; +} + +.x-grid3-locked td.x-grid3-row-marker div,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div { + padding: 0 4px; + text-align: center; +} + +.x-grid3-dirty-cell { + background: transparent no-repeat 0 0; +} + +.x-grid3-invalid-cell { + background: repeat-x bottom; +} + +.x-grid3-topbar,.x-grid3-bottombar { + overflow: hidden; + display: none; + zoom: 1; + position: relative; +} + +.x-grid3-topbar .x-toolbar { + border-right: 0 none; +} + +.x-grid3-bottombar .x-toolbar { + border-right: 0 none; + border-bottom: 0 none; + border-top: 1px solid; +} + +.x-props-grid .x-grid3-cell { + padding: 1px; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner { + background: transparent repeat-y -16px !important; + padding-left: 12px; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name { + padding: 1px; + padding-right: 0; + border: 0 none; + border-right: 1px solid; +} + +.x-grid3-col-dd { + border: 0 none; + padding: 0; + background: transparent; +} + +.x-dd-drag-ghost .x-grid3-dd-wrap { + padding: 1px 3px 3px 1px; +} + +.x-grid3-hd { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore; +} + +.x-grid3-hd-btn { + display: none; + position: absolute; + width: 14px; + background: no-repeat left center; + right: 0; + top: 0; + z-index: 2; + cursor: pointer; + outline: none; +} + +.x-grid3-hd-over .x-grid3-hd-btn,.x-grid3-hd-menu-open .x-grid3-hd-btn { + display: block; +} + +a.x-grid3-hd-btn:hover { + background-position: -14px center; +} + +.x-grid3-body .x-grid3-td-expander { + background: transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner { + padding: 0 !important; + height: 100%; +} + +.x-grid3-row-expander { + width: 100%; + height: 18px; + background-position: 4px 2px; + background-repeat: no-repeat; + background-color: transparent; +} + +.x-grid3-row-collapsed .x-grid3-row-expander { + background-position: 4px 2px; +} + +.x-grid3-row-expanded .x-grid3-row-expander { + background-position: -21px 2px; +} + +.x-grid3-row-collapsed .x-grid3-row-body { + display: none !important; +} + +.x-grid3-row-expanded .x-grid3-row-body { + display: block !important; +} + +.x-grid3-body .x-grid3-td-checker { + background: transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner,.x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner { + padding: 0 !important; + height: 100%; +} + +.x-grid3-group-checker { + float: left; +} + +.x-grid3-row-checker,.x-grid3-hd-checker { + width: 100%; + height: 18px; + background-position: 2px 2px; + background-repeat: no-repeat; + background-color: transparent; +} + +.x-grid3-hd-checker { + padding-bottom: 0px !important; +} + +.x-grid3-row .x-grid3-row-checker { + background-position: 2px 2px; +} + +.x-grid3-row-selected .x-grid3-row-checker,.x-grid3-hd-checker-on .x-grid3-hd-checker,.x-grid3-row-checked .x-grid3-row-checker + { + background-position: -23px 2px; +} + +.x-grid3-hd-checker { + background-position: 2px 3px; +} + +.x-grid3-hd-checker-on .x-grid3-hd-checker { + background-position: -23px 3px; +} + +.x-grid3-body .x-grid3-td-numberer { + background: transparent repeat-y right; +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + padding: 3px 5px 0 0 !important; + text-align: right; +} + +.x-grid3-body .x-grid3-td-row-icon { + background: transparent repeat-y right; + vertical-align: top; + text-align: center; +} + +.x-grid3-body .x-grid3-td-row-icon .x-grid3-cell-inner { + padding: 0 !important; + background-position: center center; + background-repeat: no-repeat; + width: 16px; + height: 16px; + margin-left: 2px; + margin-top: 3px; +} + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander + { + background: transparent repeat-y right; +} + +.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner { + padding: 1px 0 0 0 !important; +} + +.x-grid3-check-col { + width: 100%; + height: 16px; + background-position: center center; + background-repeat: no-repeat; + background-color: transparent; +} + +.x-grid3-check-col-on { + width: 100%; + height: 16px; + background-position: center center; + background-repeat: no-repeat; + background-color: transparent; +} + +.x-grid-group,.x-grid-group-body,.x-grid-group-hd { + zoom: 1; +} + +.x-grid-group-hd { + border-bottom: 2px solid; + cursor: pointer; + padding-top: 6px; +} + +.x-grid-group-hd .x-grid-group-div { + background: transparent no-repeat 3px -47px; + padding: 4px 4px 4px 17px; +} + +.x-grid-group-collapsed .x-grid-group-hd .x-grid-group-div { + background-position: 3px 3px; +} + +.x-grid-group-collapsed .x-grid-group-body { + display: none; +} + +.x-grid-empty { + padding: 10px; +} + +.ext-ie7 .x-grid-panel .x-panel-bbar { + position: relative; +} + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + padding-right: 0; + border-right: 1px solid; +} + +.ext-ie6 .x-grid3-header { + position: relative; +} + +.x-grid3-check-col-disabled { + width: 100%; + height: 16px; + background-position: center center; + background-repeat: no-repeat; +} + +.x-row-editor-header { + height: 2px; + overflow: hidden; +} + +.x-row-editor-footer { + height: 2px; + overflow: hidden; +} + +.ext-ie .x-row-editor-footer { + margin-top: -1px; +} + +.x-row-editor-body { + overflow: hidden; + zoom: 1; + padding-top: 2px; +} + +.x-row-editor .x-btns { + position: absolute; + top: 28px; + left: 20px; + padding-left: 5px; +} + +.x-row-editor .x-btns .x-plain-bwrap { + padding-right: 5px; +} + +.x-row-editor .x-btns .x-plain-body { + height: 31px; +} + +.x-row-editor .x-btns .x-table-layout-cell { + padding: 3px; +} + +.x-grid3-footer { + background: #f7f7f7 none repeat scroll 0 0; + border-top: 1px solid #DDDDDD; + border-bottom: 1px solid #DDDDDD; + display: block; + overflow: hidden; + position: relative; +} + +.x-grid3-footer-row { + border: 1px solid #EEEEEE; + background-color: #f7f7f7; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore; + cursor: default; +} + +.x-grid3-footer-row td { + line-height: 13px; + vertical-align: top; + padding-left: 1px; + padding-right: 1px; + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.ext-ie6 .x-grid3 .x-editor .x-form-text,.ext-ie7 .x-grid3 .x-editor .x-form-text { + top: -1px; +} + +.ext-ie8-compatibility .x-grid3 .x-editor .x-form-text { + top: 0; +} + +.x-grid-panel .x-livegrid-scroller { + z-index: 1; + position: absolute; + right: 0px; + overflow-y: scroll; + overflow-x: hidden; +} + +.x-grid3-group-checker div { + width: 14px; + height: 18px; + background-position: -1 -2px; + background-repeat: no-repeat; + background-color: transparent; +} + +.x-grid-group-hd .x-grid3-group-check { + background-image: url(../images/default/menu/checked.gif); +} + +.x-grid-group-hd .x-grid3-group-uncheck { + background-image: url(../images/default/menu/unchecked.gif); +} + +.x-grid3-hd-row .x-filtered-column { + font-style: italic !important; + font-weight: bold !important; +} + +.ext-strict .ext-gecko .x-inline-editor .x-small-editor .x-form-text { + height: 18px !important; +} +.x-dd-drag-proxy{ + position:absolute; + left:0; + top:0; + visibility:hidden; + z-index:15000; +} +.x-dd-drag-ghost{ + -moz-opacity: 0.85; + opacity:.85; + filter: alpha(opacity=85); + border: 1px solid; + padding:3px; + padding-left:20px; + white-space:nowrap; +} +.x-dd-drag-repair .x-dd-drag-ghost{ + -moz-opacity: 0.4; + opacity:.4; + filter: alpha(opacity=40); + border:0 none; + padding:0; + background-color:transparent; +} +.x-dd-drag-repair .x-dd-drop-icon{ + visibility:hidden; +} +.x-dd-drop-icon{ + position:absolute; + top:3px; + left:3px; + display:block; + width:16px; + height:16px; + background-color:transparent; + background-position: center; + background-repeat: no-repeat; + z-index:1; +} +.x-view-selector { + position:absolute; + left:0; + top:0; + width:0; + border:1px dotted; + opacity: .5; + -moz-opacity: .5; + filter:alpha(opacity=50); + zoom:1; +} + +.x-dd-cursor { + cursor: default !important; +} + +.x-insert-bar { + position: absolute; + + z-index: 99999; +} + +.x-insert-bar td { + line-height: 1px; + font-size: 1px; +} + +.x-insert-left { + background: url(../images/gxt/dd/insert-bg.gif) no-repeat; +} + +.x-insert-mid { + background: url(../images/gxt/dd/insert-bg.gif) repeat-x 0 -12px; +} + +.x-insert-right { + background: url(../images/gxt/dd/insert-bg.gif) no-repeat 0px -6px; +} +.tree-folder { + background: url(../images/gxt/icons/folder-closed.gif) no-repeat center + left !important; +} + +.tree-folder-open { + background: url(../images/gxt/icons/folder.gif) no-repeat center left + !important; +} + +.my-tree { + cursor: default; + font-size: 11px; + -moz-outline: none; + -moz-user-focus: none; +} + +.my-root-item { + padding: 4px; +} + +.my-tree-item,.my-tree-item table,.my-tree-item table td { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; + font-size: 11px; +} + +.my-tree-item td { + height: 19px; +} + +.my-tree-indent { + line-height: 1px; + font-size: 1px; +} + +.my-tree-joint div { + width: 15px; + height: 19px; + line-height: 1px; + font-size: 1px; +} + +.my-tree-left,.my-tree-left div,.my-tree-right { + line-height: 1px; + font-size: 1px; + width: 3px; +} + +.my-tree-left div,.my-tree-right div { + width: 3px; +} + +.my-tree-item,.my-treeitem-wrap { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tree-check div { + width: 17px; + height: 17px; + line-height: 1px; + font-size: 1px; +} + +.my-tree-icon div { + width: 16px; + height: 17px; + cursor: pointer; + background-repeat: no-repeat; + background-position: center; +} + +.my-tree-item-text span { + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 12px; + white-space: nowrap; + padding-left: 3px; + padding-right: 3px; + display: block; + height: 15px; + cursor: pointer; +} + +.my-tree-over .my-tree-left { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left + -57px; +} + +.my-tree-over .my-tree-right { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right + -76px; +} + +.my-tree-over .my-tree-check,.my-tree-over .my-tree-icon,.my-tree-over .my-tree-item-text + { + background: url(../images/gxt/shared/select-19-bg.gif) left -95px; +} + +.my-tree-sel .my-tree-left { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left + 0px; +} + +.my-tree-sel .my-tree-right { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right + -19px; +} + +.my-tree-sel .my-tree-check,.my-tree-sel .my-tree-icon,.my-tree-sel .my-tree-item-text + { + background: url(../images/gxt/shared/select-19-bg.gif) left -38px; +} + +.my-tree-drop .my-tree-left { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left + -115px; +} + +.my-tree-drop .my-tree-right { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right + -133px; +} + +.my-tree-drop .my-tree-check,.my-tree-drop .my-tree-icon,.my-tree-drop .my-tree-item-text + { + background: url(../images/gxt/shared/select-19-bg.gif) left -152px; +} + +.my-tree-close { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px + 1px; +} + +.my-tree-open { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px + -32px; +} + +.my-tree-joint-over .my-tree-open { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px + -48px; +} + +.my-tree-joint-over .my-tree-close { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px + -15px; +} + +.my-tree-notchecked { + background: url(../images/gxt/tree/notchecked.gif) no-repeat 0px 50%; +} + +.my-tree-checked { + background: url(../images/gxt/tree/checked.gif) no-repeat 0px 50%; +} + +.my-tree-loading .tree-folder { + background: url(../images/gxt/icons/wait.gif) no-repeat 0px -1px + !important; +} + +.my-tree-loading .my-tree-item-text span { + font-style: italic; +} + +.x-ftree-selected .x-ftree-text { + background-color: #d9e8fb; +} + +.x-ftree-node-over .x-ftree-text { + background-color: #eee; +} + +.x-ftree-item { + line-height: 18px; +} + +.x-ftree-joint,.x-ftree-icon { + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-position: center; + background-repeat: no-repeat; +} + +.x-ftree-text { + color: black; + font: normal 11px arial, tahoma, helvetica, sans-serif; + white-space: nowrap; + text-decoration: none; + color: black; + padding-left: 4px; + vertical-align: middle; + line-height: 18px; + padding: 2px 4px 4px 4px; +} + +/* some default icons for leaf/folder */ +.x-ftree-expanded .x-ftree-icon { + background-image: url(../images/default/tree/folder-open.gif); +} + +.x-ftree-leaf .x-ftree-icon { + background-image: url(../images/default/tree/leaf.gif); +} + +.x-ftree-collapsed .x-ftree-icon { + background-image: url(../images/gxt/icons/folder-closed.gif); +} + +/* Arrows */ +.x-ftree-arrows .x-ftree-joint { + background: transparent; +} + +.x-ftree-arrows .x-ftree-joint-plus { + background: transparent url(../images/default/tree/arrows.gif) no-repeat + 0 0; +} + +.x-ftree-arrows .x-ftree-joint-minus { + background: transparent url(../images/default/tree/arrows.gif) no-repeat + -16px 0; +} + +.x-ftree-arrows .x-ftree-ec-over .x-ftree-joint-plus { + background-position: -32px 0; +} + +.x-ftree-arrows .x-ftree-ec-over .x-ftree-joint-minus { + background-position: -48px 0; +} + +.x-ftree2-highlightrow { + border: 1px dotted #545352; +} + +.x-ftree2-selected { + background-color: #d9e8fb !important; +} + +.x-ftree2-node-over { + background-color: #eee; +} + +.x-ftree2-node-drop { + background-color: #defadc; +} + +.x-ftree2-joint,.x-ftree2-icon { + border: 0 none; + height: 18px; + margin: 0; + padding: 0; + vertical-align: top; + width: 16px; + background-position: center; + background-repeat: no-repeat; +} + +.x-ftree2-joint div { + width: 16px; +} + +.x-ftree2-el-ct { + display: none; +} + +.x-ftree2-node { + padding-bottom: 1px; +} + +.x-ftree2-text { + vertical-align: middle !important; + white-space: nowrap !important; +} + +.x-ftree2-text span { + color: black; + font: normal 11px arial, tahoma, helvetica, sans-serif; + white-space: nowrap; + text-decoration: none; + color: black; + padding: 2px 4px 2px 1px; + display: block; +} + +.ext-ie .x-ftree2-text span { + padding-left: 3px; +} + +.x-ftree2-check { + width: 17px; +} + +.x-ftree2-check div { + width: 17px; + height: 17px; +} + +/* some default icons for leaf/folder */ +.x-ftree2-expanded .x-ftree2-icon { + background-image: url(../images/default/tree/folder-open.gif); +} + +.x-ftree2-leaf .x-ftree2-icon { + background-image: url(../images/default/tree/leaf.gif); +} + +.x-ftree2-collapsed .x-ftree2-icon { + background-image: url(../images/gxt/icons/folder-closed.gif); +} + +/* Arrows */ +.x-ftree2-arrows .x-ftree2-joint { + background: transparent; +} + +.x-ftree2-arrows .x-ftree2-joint-plus { + background: transparent url(../images/default/tree/arrows.gif) no-repeat + 0 0; +} + +.x-ftree2-arrows .x-ftree2-joint-minus { + background: transparent url(../images/default/tree/arrows.gif) no-repeat + -16px 0; +} + +.x-ftree2-arrows .x-ftree2-ec-over .x-ftree2-joint-plus { + background-position: -32px 0; +} + +.x-ftree2-arrows .x-ftree2-ec-over .x-ftree2-joint-minus { + background-position: -48px 0; +} + +.x-treegrid { + -moz-outline: none; + -moz-user-focus: none; + outline: 0 none; +} + +.x-treegrid .x-treegrid-column .x-grid3-cell-inner { + padding: 0px !important; +} + +.x-tree3 { + cursor: default; + -moz-outline: none; + -moz-user-focus: none; + outline: 0 none; +} + +.ext-strict .ext-gecko .x-tree3, .ext-strict .ext-webkit .x-tree3 { + padding-bottom: 1px; +} + +.x-tree3-node { + cursor: default; +} + +.x-tree3-el { + white-space: nowrap; + height: 21px; + position: relative; +} + +.x-tree3-node-text { + white-space: nowrap; + line-height: 11px; + text-decoration: none; + padding: 0 0 0 3px; + position: relative; + top: -4px; +} + +.ext-ie9 .x-tree3-node-text-widget { + display: block; +} + +.x-tree3-node-ct { + display: none; +} + +.x-tree3-node-text-widget { + position: static !important; + padding: 0px !important; +}.x-date-picker { + border: 1px solid; + border-top:0 none; + position:relative; + -moz-outline:0 none; + outline:0 none; +} +.x-date-picker a { + -moz-outline:0 none; + outline:0 none; +} +.x-date-inner, .x-date-inner td, .x-date-inner th{ + border-collapse:separate; +} +.x-date-middle,.x-date-left,.x-date-right { + background: repeat-x 0 -83px; + overflow:hidden; +} +.x-date-middle .x-btn-tc,.x-date-middle .x-btn-tl,.x-date-middle .x-btn-tr, +.x-date-middle .x-btn-mc,.x-date-middle .x-btn-ml,.x-date-middle .x-btn-mr, +.x-date-middle .x-btn-bc,.x-date-middle .x-btn-bl,.x-date-middle .x-btn-br{ + background:transparent !important; + vertical-align:middle; +} +.x-date-middle .x-btn-mc em.x-btn-arrow { + background:transparent no-repeat right 0; +} +.x-date-right, .x-date-left { + width:18px; +} +.x-date-right{ + text-align:right; +} +.x-date-middle { + padding-top:2px; + padding-bottom:2px; + width:130px; +} +.x-date-right a, .x-date-left a{ + display:block; + width:16px; + height:16px; + background-position: center; + background-repeat: no-repeat; + cursor:pointer; + -moz-opacity: 0.6; + opacity:.6; + filter: alpha(opacity=60); +} +.x-date-right a:hover, .x-date-left a:hover{ + -moz-opacity: 1; + opacity:1; + filter: alpha(opacity=100); +} +.x-date-right a { + margin-right:2px; + text-decoration:none !important; +} +.x-date-left a{ + margin-left:2px; + text-decoration:none !important; +} +table.x-date-inner { + width:100%; + table-layout:fixed; +} +.x-date-inner th { + width:25px; +} +.x-date-inner th { + background: repeat-x left top; + text-align:right !important; + border-bottom: 1px solid; + cursor:default; + padding:0; + border-collapse:separate; +} +.x-date-inner th span { + display:block; + padding:2px; + padding-right:7px; +} +.x-date-inner td { + border: 1px solid; + text-align:right; + padding:0; +} +.x-date-inner a { + padding:2px 5px; + display:block; + text-decoration:none; + text-align:right; + zoom:1; +} +.x-date-inner .x-date-active{ + cursor:pointer; + color:black; +} +.x-date-inner .x-date-selected a{ + background: repeat-x left top; + border:1px solid; + padding:1px 4px; +} +.x-date-inner .x-date-today a{ + border: 1px solid; + padding:1px 4px; +} +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + text-decoration:none !important; +} +.x-date-bottom { + padding:4px; + border-top: 1px solid; + background: repeat-x left top; +} +.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{ + text-decoration:none !important; +} +.x-date-inner .x-date-disabled a { + cursor:default; +} +.x-date-mmenu .x-menu-item { + padding:1px 24px 1px 4px; + white-space: nowrap; +} +.x-date-mmenu .x-menu-item .x-menu-item-icon { + width:10px; + height:10px; + margin-right:5px; + background-position:center -4px !important; +} +.x-date-mp { + position:absolute; + left:0; + top:0; + display:none; +} +.x-date-mp td { + padding:2px; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} +td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn { + border: 0 none; + text-align:center; + vertical-align: middle; + width:25%; +} +.x-date-mp-ok { + margin-right:3px; +} +.x-date-mp-btns button { + text-decoration:none; + text-align:center; + text-decoration:none !important; + border:1px solid; + padding:1px 3px 1px; + cursor:pointer; +} +.x-date-mp-btns { + background: repeat-x left top; +} +.x-date-mp-btns td { + border-top: 1px solid; + text-align:center; +} +td.x-date-mp-month a,td.x-date-mp-year a { + display:block; + padding:2px 4px; + text-decoration:none; + text-align:center; +} +td.x-date-mp-month a:hover,td.x-date-mp-year a:hover { + text-decoration:none; + cursor:pointer; +} +td.x-date-mp-sel a { + padding:1px 3px; + background: repeat-x left top; + border:1px solid; +} +.x-date-mp-ybtn a { + overflow:hidden; + width:15px; + height:15px; + cursor:pointer; + background:transparent no-repeat; + display:block; + margin:0 auto; +} +.x-date-mp-ybtn a.x-date-mp-next { + background-position:0 -120px; +} +.x-date-mp-ybtn a.x-date-mp-next:hover { + background-position:-15px -120px; +} +.x-date-mp-ybtn a.x-date-mp-prev { + background-position:0 -105px; +} +.x-date-mp-ybtn a.x-date-mp-prev:hover { + background-position:-15px -105px; +} +.x-date-mp-ybtn { + text-align:center; +} +td.x-date-mp-sep { + border-right:1px solid; +} + +.x-date-picker, .x-date-picker a { + font-size: 11px; +} + +.x-date-right-icon { + background-image: url(../images/default/shared/right-btn.gif); + margin-right: 2px; + text-decoration: none !important; +} + +.x-date-left-icon { + background-image: url(../images/default/shared/left-btn.gif); + margin-left: 4px; + text-decoration: none !important; +} + +.x-date-days { + table-layout: fixed; + width: 100%; +} + +.x-date-days td { + width: 25px; + border: none; +} + +.x-date-days td span { + display: block; + padding: 2px 7px 2px 2px; +} + +.x-date-days td { + background: #DFECFB url(../images/default/shared/glass-bg.gif) repeat-x scroll left top; + border-bottom: 1px solid #A3BAD9; + border-collapse: separate; + color: #233D6D; + cursor: default; + font-family: arial, helvetica, tahoma, sans-serif; + font-size: 10px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + padding: 0pt; + text-align: right !important; +} + +.x-date-picker .x-date-header { + background: url(../images/default/shared/hd-sprite.gif) repeat-x 0 -83px; + height: 22px; + left: 10px; + top: 10px; + width: 157px; +} + +.x-date-header .x-btn .x-btn-text { + color: #fff; +} + +.x-date-picker-footer { + width: 100%; +} + +.x-date-picker-footer td { + text-align: center; +} + +.x-date-left { + background: transparent url(../images/default/shared/hd-sprite.gif) repeat-x scroll 0pt -83px; + color: #FFFFFF; + font-family: "sans serif", tahoma, verdana, helvetica; + font-size: 11px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: bold; + line-height: normal; + overflow: hidden; +} + +.x-date-inner .x-date-active-hover { + background: #ddecfe !important; +}.x-tip{ + position: absolute; + top: 0; + left:0; + visibility: hidden; + z-index: 20000; + border:0 none; +} +.x-tip .x-tip-close{ + height: 15px; + float:right; + width: 15px; + margin:0 0 2px 2px; + cursor:pointer; + display:none; +} +.x-tip .x-tip-tc { + background: transparent no-repeat 0 -62px; + padding-top:3px; + overflow:hidden; + zoom:1; +} +.x-tip .x-tip-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + overflow:hidden; + zoom:1; +} +.x-tip .x-tip-tr { + background: transparent no-repeat right 0; + padding-right:6px; + overflow:hidden; + zoom:1; +} +.x-tip .x-tip-bc { + background: transparent no-repeat 0 -121px; + height:3px; + overflow:hidden; +} +.x-tip .x-tip-bl { + background: transparent no-repeat 0 -59px; + padding-left:6px; + zoom:1; +} +.x-tip .x-tip-br { + background: transparent no-repeat right -59px; + padding-right:6px; + zoom:1; +} +.x-tip .x-tip-mc { + border:0 none; +} +.x-tip .x-tip-ml { + background: no-repeat 0 -124px; + padding-left:6px; + zoom:1; +} +.x-tip .x-tip-mr { + background: transparent no-repeat right -124px; + padding-right:6px; + zoom:1; +} +.ext-ie .x-tip .x-tip-header,.ext-ie .x-tip .x-tip-tc { + font-size:0; + line-height:0; +} +.ext-border-box .x-tip .x-tip-header,.ext-border-box .ext-ie .x-tip .x-tip-tc { + line-height:1px; +} +.x-tip .x-tip-header-text { + padding:0; + margin:0 0 2px 0; +} +.x-tip .x-tip-body { + margin:0 !important; + line-height:14px; + padding:0; +} +.x-tip .x-tip-body .loading-indicator { + margin:0; +} +.x-tip-draggable .x-tip-header,.x-tip-draggable .x-tip-header-text { + cursor:move; +} +.x-form-invalid-tip .x-tip-tc { + background: repeat-x 0 -12px; + padding-top:6px; +} +.x-form-invalid-tip .x-tip-bc { + background: repeat-x 0 -18px; + height:6px; +} +.x-form-invalid-tip .x-tip-bl { + background: no-repeat 0 -6px; +} +.x-form-invalid-tip .x-tip-br { + background: no-repeat right -6px; +} +.x-form-invalid-tip .x-tip-body { + padding:2px; +} +.x-form-invalid-tip .x-tip-body { + padding-left:24px; + background:transparent no-repeat 2px 2px; +} +.x-tip-anchor { + position: absolute; + width: 9px; + height: 10px; + overflow:hidden; + background: transparent no-repeat 0 0; + zoom:1; +} +.x-tip-anchor-bottom { + background-position: -9px 0; +} +.x-tip-anchor-right { + background-position: -18px 0; + width: 10px; +} +.x-tip-anchor-left { + background-position: -28px 0; + width: 10px; +} +.x-menu { + border: 1px solid; + z-index: 15000; + zoom: 1; + background: repeat-y; + -moz-outline: none; + outline: 0 none; +} + +.x-menu a { + text-decoration: none !important; +} + +.ext-ie .x-menu { + zoom: 1; + overflow: hidden; +} + +.x-menu-list { + padding: 2px; + background: transparent; + border: 0 none; + overflow: hidden; + overflow-y: hidden; +} + +.ext-strict .ext-ie .x-menu-list { + position: relative; +} + +.x-menu x-menu-sep-li { + font-size: 1px; + line-height: 1px; +} + +.x-menu-list-item { + white-space: nowrap; + display: block; + padding: 1px; +} + +.x-menu-item { + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore +} + +.x-menu-item-arrow { + background: transparent no-repeat right; +} + +.x-menu-sep { + display: block; + font-size: 1px; + line-height: 1px; + margin: 2px 3px; + border-bottom: 1px solid; + overflow: hidden; +} + +.x-menu-focus { + position: absolute; + left: -1px; + top: -1px; + width: 1px; + height: 1px; + line-height: 1px; + font-size: 1px; + -moz-outline: 0 none; + outline: 0 none; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore + overflow: hidden; + display: block; +} + +a.x-menu-item { + cursor: pointer; + display: block; + line-height: 16px; + outline-color: -moz-use-text-color; + outline-style: none; + outline-width: 0; + padding: 3px 21px 3px 27px; + position: relative; + text-decoration: none; + white-space: nowrap; +} + +.x-menu-item-active { + border-style: solid; + border-width: 1px; + padding: 0; +} + +.x-menu-item-icon { + border: 0 none; + height: 16px; + padding: 0; + vertical-align: top; + width: 16px; + position: absolute; + left: 3px; + top: 3px; + margin: 0; + background-position: center; +} + +.ext-ie .x-menu-item-icon { + left: -24px; +} + +.ext-strict .x-menu-item-icon { + left: 3px; +} + +.ext-ie6 .x-menu-item-icon { + left: -24px; +} + +.ext-ie .x-menu-item-icon { + vertical-align: middle; +} + +.x-date-menu .x-menu-list { + padding: 0; +} + +.x-menu-date-item { + padding: 0; +} + +.x-menu .x-color-palette,.x-menu .x-date-picker { + margin-left: 26px; + margin-right: 4px; +} + +.x-menu .x-date-picker { + border: 1px solid; + margin-top: 2px; + margin-bottom: 2px; +} + +.x-menu-plain .x-color-palette,.x-menu-plain .x-date-picker { + margin: 0; + border: 0 none; +} + +.x-date-menu { + padding: 0 !important; +} + +.x-cycle-menu .x-menu-item-checked { + border: 1px dotted !important; + padding: 0; +} + +.x-menu .x-menu-scroller { + width: 100%; + background-repeat: no-repeat; + background-position: center; + height: 8px; + line-height: 8px; + cursor: pointer; + margin: 0; + padding: 0; +} + +.x-menu .x-menu-scroller-active { + height: 6px; + line-height: 6px; +} + +.x-menu-list-item-indent { + padding-left: 27px !important; +} + +.x-menu-text { + + border-style: solid; + background: #D6E3F2; + border-color:#DAE6F4 #99bbe8 #99bbe8 #DAE6F4; + border-width: 1px; + margin:-2px -2px 0; + color:#15428b; + font:bold 10px tahoma,arial,verdana,sans-serif; + display:block; + padding:3px; +} + +.x-menubar { + padding: 3px; + border-style: solid; + border-width: 0 0 1px 0; + cursor: default; + border-color: #a9bfd3; + background-color: #d0def0; + padding: 3px; + background-image: url(../images/default/toolbar/bg.gif); +} + +.x-menubar-item { + padding: 1px 8px; + font: 12px arial, verdana, sans-serif; +} + +.x-menubar-item-over { + background-color: #98c5f5; +} + +.x-menubar-item-active { + background-color: #98c5f5; +}.x-box-tl { + background: transparent no-repeat 0 0; + zoom:1; +} +.x-box-tc { + height: 8px; + background: transparent repeat-x 0 0; + overflow: hidden; +} +.x-box-tr { + background: transparent no-repeat right -8px; +} +.x-box-ml { + background: transparent repeat-y 0; + padding-left: 4px; + overflow: hidden; + zoom:1; +} +.x-box-mc { + background: repeat-x 0 -16px; + padding: 4px 10px; +} +.x-box-mc h3 { + margin: 0 0 4px 0; + zoom:1; +} +.x-box-mr { + background: transparent repeat-y right; + padding-right: 4px; + overflow: hidden; +} +.x-box-bl { + background: transparent no-repeat 0 -16px; + zoom:1; +} +.x-box-bc { + background: transparent repeat-x 0 -8px; + height: 8px; + overflow: hidden; +} +.x-box-br { + background: transparent no-repeat right -24px; +} +.x-box-tl, .x-box-bl { + padding-left: 8px; + overflow: hidden; +} +.x-box-tr, .x-box-br { + padding-right: 8px; + overflow: hidden; +} +.x-combo-list { + border:1px solid; + zoom:1; + overflow:hidden; + position: absolute; +} +.x-combo-list-inner { + overflow:auto; + position:relative; + zoom:1; + overflow-x:hidden; +} +.x-combo-list-hd { + border-bottom:1px solid; + padding:3px; +} +.x-resizable-pinned .x-combo-list-inner { + border-bottom:1px solid; +} +.x-combo-list-item { + padding:2px; + border:1px solid; + white-space: nowrap; + overflow:hidden; + text-overflow: ellipsis; +} +.x-combo-list .x-combo-selected{ + border:1px dotted !important; + cursor:pointer; +} +.x-combo-list .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} +.x-panel { + border-style: solid; + border-width:0; + outline: 0 none; +} +.x-panel-header { + overflow:hidden; + zoom:1; + padding:5px 3px 4px 5px; + border:1px solid; + line-height: 15px; + background: transparent repeat-x 0 -1px; +} +.x-panel-body { + border:1px solid; + border-top:0 none; + overflow:hidden; + position: relative; +} +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border:1px solid; + border-top:0 none; + overflow:hidden; + padding:2px; +} +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top:1px solid; + border-bottom: 0 none; +} +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top:1px solid; +} +.x-panel-header { + overflow:hidden; + zoom:1; +} +.x-panel-tl .x-panel-header { + padding:5px 0 4px 0; + border:0 none; + background:transparent; + line-height: 15px; +} +.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon { + padding-left:20px !important; + background-repeat:no-repeat; + background-position:0 4px; + zoom:1; +} +.x-panel-inline-icon { + width:16px; + height:16px; + background-repeat:no-repeat; + background-position:0 0; + vertical-align:middle; + margin-right:4px; + margin-top:-1px; + margin-bottom:-1px; +} +.x-panel-tc { + background: transparent repeat-x 0 0; + overflow:hidden; +} +.ext-strict .ext-ie7 .x-panel-tc { + overflow: visible; +} +.x-panel-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + border-bottom:1px solid; +} +.x-panel-tr { + background: transparent no-repeat right 0; + zoom:1; + padding-right:6px; +} +.x-panel-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} +.x-panel-bc .x-panel-footer { + zoom:1; +} +.x-panel-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} +.x-panel-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} +.x-panel-mc { + border:0 none; + padding:0; + margin:0; + padding-top:6px; +} +.x-panel-mc .x-panel-body { + background:transparent; + border: 0 none; +} +.x-panel-ml { + background: repeat-y 0 0; + padding-left:6px; + zoom:1; +} +.x-panel-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} +.x-panel-bc .x-panel-footer { + padding-bottom:6px; +} +.x-panel-nofooter .x-panel-bc, .x-panel-nofooter .x-window-bc { + height:6px; + font-size:0; + line-height:0; +} +.x-panel-bwrap { + overflow:hidden; + zoom:1; + left:0; + top:0; +} +.x-panel-body { + overflow:hidden; + zoom:1; +} +.x-panel-collapsed .x-resizable-handle{ + display:none; +} +.ext-gecko .x-panel-animated * { + overflow:hidden !important; +} +.x-plain-body { + overflow:hidden; +} +.x-plain-bbar .x-toolbar { + overflow:hidden; + padding:2px; +} +.x-plain-tbar .x-toolbar { + overflow:hidden; + padding:2px; +} +.x-plain-bwrap { + overflow:hidden; + zoom:1; +} +.x-plain { + overflow:hidden; +} +.x-tool { + overflow:hidden; + width:15px; + height:15px; + float:right; + cursor:pointer; + background:transparent no-repeat; + margin-left:2px; +} +.x-tool-toggle { + background-position:0 -60px; +} +.x-tool-toggle-over { + background-position:-15px -60px; +} +.x-panel-collapsed .x-tool-toggle { + background-position:0 -75px; +} +.x-panel-collapsed .x-tool-toggle-over { + background-position:-15px -75px; +} +.x-tool-close { + background-position:0 -0; +} +.x-tool-close-over { + background-position:-15px 0; +} +.x-tool-minimize { + background-position:0 -15px; +} +.x-tool-minimize-over { + background-position:-15px -15px; +} +.x-tool-maximize { + background-position:0 -30px; +} +.x-tool-maximize-over { + background-position:-15px -30px; +} +.x-tool-restore { + background-position:0 -45px; +} +.x-tool-restore-over { + background-position:-15px -45px; +} +.x-tool-gear { + background-position:0 -90px; +} +.x-tool-gear-over { + background-position:-15px -90px; +} +.x-tool-pin { + background-position:0 -135px; +} +.x-tool-pin-over { + background-position:-15px -135px; +} +.x-tool-unpin { + background-position:0 -150px; +} +.x-tool-unpin-over { + background-position:-15px -150px; +} +.x-tool-right { + background-position:0 -165px; +} +.x-tool-right-over { + background-position:-15px -165px; +} +.x-tool-left { + background-position:0 -180px; +} +.x-tool-left-over { + background-position:-15px -180px; +} +.x-tool-up { + background-position:0 -210px; +} +.x-tool-up-over { + background-position:-15px -210px; +} +.x-tool-down { + background-position:0 -195px; +} +.x-tool-down-over { + background-position:-15px -195px; +} +.x-tool-refresh { + background-position:0 -225px; +} +.x-tool-refresh-over { + background-position:-15px -225px; +} +.x-tool-minus { + background-position:0 -255px; +} +.x-tool-minus-over { + background-position:-15px -255px; +} +.x-tool-plus { + background-position:0 -240px; +} +.x-tool-plus-over { + background-position:-15px -240px; +} +.x-tool-search { + background-position:0 -270px; +} +.x-tool-search-over { + background-position:-15px -270px; +} +.x-tool-save { + background-position:0 -285px; +} +.x-tool-save-over { + background-position:-15px -285px; +} +.x-tool-help { + background-position:0 -300px; +} +.x-tool-help-over { + background-position:-15px -300px; +} +.x-tool-print { + background-position:0 -315px; +} +.x-tool-print-over { + background-position:-15px -315px; +} +.x-panel-ghost { + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + opacity:.65; + -moz-opacity:.65; + filter:alpha(opacity=65); +} +.x-panel-ghost ul { + margin:0; + padding:0; + overflow:hidden; + font-size:0; + line-height:0; + border:1px solid; + border-top:0 none; + display:block; +} +.x-panel-ghost * { + cursor:move !important; +} +.x-panel-dd-spacer { + border:2px dashed; +} +.x-panel-btns { + padding:5px; + overflow:hidden; +} +.x-panel-btns-left .x-buttonbar { + clear:none; +} +.x-panel-btns-center{ + text-align:center; +} +.x-panel-btns-center .x-toolbar-ct { + margin:0 auto; + text-align:left; + width:auto; +} +.x-panel-fbar td.x-toolbar-cell{ + padding:0px; +} +.x-panel-fbar { + display: block; + padding:2px; + position:relative; + left:0; + top:0; + zoom:1; + overflow:hidden; +} + +.x-panel-fbar .x-toolbar-cell { + vertical-align:middle; +} + +.x-panel-fbar td { + vertical-align:middle; +} +.x-panel-btns .x-btn-focus .x-btn-left{ + background-position:0 -147px; +} +.x-panel-btns .x-btn-focus .x-btn-right{ + background-position:0 -168px; +} +.x-panel-btns .x-btn-focus .x-btn-center{ + background-position:0 -189px; +} +.x-panel-btns .x-btn-over .x-btn-left{ + background-position:0 -63px; +} +.x-panel-btns .x-btn-over .x-btn-right{ + background-position:0 -84px; +} +.x-panel-btns .x-btn-over .x-btn-center{ + background-position:0 -105px; +} +.x-panel-btns .x-btn-click .x-btn-center{ + background-position:0 -126px; +} +.x-panel-btns .x-btn-click .x-btn-right{ + background-position:0 -84px; +} +.x-panel-btns .x-btn-click .x-btn-left{ + background-position:0 -63px; +} +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + white-space: nowrap; +} +.x-window { + zoom:1; + -moz-outline: none; + outline: 0 none; +} +.x-window .x-resizable-handle { + opacity:0; + -moz-opacity:0; + filter:alpha(opacity=0); +} +.x-window-proxy { + border:1px solid; + z-index:12000; + overflow:hidden; + position:absolute; + left:0;top:0; + display:none; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} +.x-window-header { + overflow:hidden; + zoom:1; +} +.x-window-bwrap { + z-index:1; + position:relative; + zoom:1; + left:0;top:0; +} +.x-window-tl .x-window-header { + padding:5px 0 4px 0; +} +.x-window-header-text { + cursor:pointer; +} +.x-window-tc { + background: transparent repeat-x 0 0; + overflow:hidden; + zoom:1; +} +.x-window-tl { + background: transparent no-repeat 0 0; + padding-left:6px; + zoom:1; + z-index:1; + position:relative; +} +.x-window-tr { + background: transparent no-repeat right 0; + padding-right:6px; +} +.x-window-bc { + background: transparent repeat-x 0 bottom; + zoom:1; +} +.x-window-bc .x-window-footer { + padding-bottom:6px; + zoom:1; + font-size:0; + line-height:0; +} +.x-window-bl { + background: transparent no-repeat 0 bottom; + padding-left:6px; + zoom:1; +} +.x-window-br { + background: transparent no-repeat right bottom; + padding-right:6px; + zoom:1; +} +.x-window-mc { + border:1px solid; + padding:0; + margin:0; +} +.x-window-ml { + background: transparent repeat-y 0 0; + padding-left:6px; + zoom:1; +} +.x-window-mr { + background: transparent repeat-y right 0; + padding-right:6px; + zoom:1; +} +.x-window-body { + overflow:hidden; +} +.x-window-bwrap { + overflow:hidden; +} +.x-window-maximized .x-window-bl, .x-window-maximized .x-window-br, + .x-window-maximized .x-window-ml, .x-window-maximized .x-window-mr, + .x-window-maximized .x-window-tl, .x-window-maximized .x-window-tr { + padding:0; +} +.x-window-maximized .x-window-footer { + padding-bottom:0; +} +.x-window-maximized .x-window-tc { + padding-left:3px; + padding-right:3px; +} +.x-window-maximized .x-window-mc { + border-left:0 none; + border-right:0 none; +} +.x-window-tbar .x-toolbar, .x-window-bbar .x-toolbar { + border-left:0 none; + border-right: 0 none; +} +.x-window-bbar .x-toolbar { + border-top:1px solid; + border-bottom:0 none; +} +.x-window-draggable, .x-window-draggable .x-window-header-text { + cursor:move; +} +.x-window-maximized .x-window-draggable, .x-window-maximized .x-window-draggable .x-window-header-text { + cursor:default; +} +.x-window-body { + background:transparent; +} +.x-panel-ghost .x-window-tl { + border-bottom:1px solid; +} +.x-panel-collapsed .x-window-tl { + border-bottom:1px solid; +} +.x-window-maximized-ct { + overflow:hidden; +} +.x-window-sizing-ghost ul { + border:0 none !important; +} +.x-dlg-focus{ + -moz-outline:0 none; + outline:0 none; + width:0; + height:0; + overflow:hidden; + position:absolute; + top:0; + left:0; +} +.x-dlg-mask{ + z-index:10000; + display:none; + position:absolute; + top:0; + left:0; + -moz-opacity: 0.5; + opacity:.50; + filter: alpha(opacity=50); +} +body.ext-ie6.x-body-masked select { + visibility:hidden; +} +body.ext-ie6.x-body-masked .x-window select { + visibility:visible; +} +.x-window-plain .x-window-mc { + border: 1px solid; +} +.x-window-plain .x-window-body { + border: 1px solid; + background:transparent !important; +} +.x-html-editor-wrap { + border:1px solid; +} + +.x-html-editor-tb .x-btn-text { + background:transparent no-repeat; +} + +.x-html-editor-tip .x-tip-bd .x-tip-bd-inner { + padding:5px; + padding-bottom:1px; +} + +.x-html-editor-tb .x-toolbar { + position:static !important; +}.x-panel-noborder .x-panel-body-noborder { + border-width:0; +} +.x-panel-noborder .x-panel-header-noborder { + border-width:0 0 1px; + border-style:solid; +} +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-width:1px 0 0 0; + border-style:solid; +} +.x-window-noborder .x-window-mc { + border-width:0; +} +.x-window-plain .x-window-body-noborder { + border-width:0; +} +.x-tab-panel-noborder .x-tab-panel-body-noborder { + border-width:0; +} +.x-tab-panel-noborder .x-tab-panel-header-noborder { + border-width: 0 0 1px 0; +} +.x-tab-panel-noborder .x-tab-panel-footer-noborder { + border-width: 1px 0 0 0; +} +.x-tab-panel-bbar-noborder .x-toolbar { + border-width: 1px 0 0 0; + border-style:solid; +} +.x-tab-panel-tbar-noborder .x-toolbar { + border-width:0 0 1px; + border-style:solid; +} +.x-border-panel { + position:absolute !important; + left:0; + top:0; +} +.x-tool-collapse-south { + background-position:0 -195px; +} +.x-tool-collapse-south-over { + background-position:-15px -195px; +} +.x-tool-collapse-north { + background-position:0 -210px; +} +.x-tool-collapse-north-over { + background-position:-15px -210px; +} +.x-tool-collapse-west { + background-position:0 -180px; +} +.x-tool-collapse-west-over { + background-position:-15px -180px; +} +.x-tool-collapse-east { + background-position:0 -165px; +} +.x-tool-collapse-east-over { + background-position:-15px -165px; +} +.x-tool-expand-south { + background-position:0 -210px; +} +.x-tool-expand-south-over { + background-position:-15px -210px; +} +.x-tool-expand-north { + background-position:0 -195px; +} +.x-tool-expand-north-over { + background-position:-15px -195px; +} +.x-tool-expand-west { + background-position:0 -165px; +} +.x-tool-expand-west-over { + background-position:-15px -165px; +} +.x-tool-expand-east { + background-position:0 -180px; +} +.x-tool-expand-east-over { + background-position:-15px -180px; +} +.x-tool-expand-north, .x-tool-expand-south { + float:right; + margin:3px; +} +.x-tool-expand-east, .x-tool-expand-west { + float:none; + margin:3px auto; +} +.x-accordion-hd .x-tool-toggle { + background-position:0 -255px; +} +.x-accordion-hd .x-tool-toggle-over { + background-position:-15px -255px; +} +.x-panel-collapsed .x-accordion-hd .x-tool-toggle { + background-position:0 -240px; +} +.x-panel-collapsed .x-accordion-hd .x-tool-toggle-over { + background-position:-15px -240px; +} +.x-accordion-hd { + padding-top:4px; + padding-bottom:3px; + border-top:0 none; + background: transparent repeat-x 0 -9px; +} +.x-layout-collapsed{ + position:absolute; + left:-10000px; + top:-10000px; + visibility:hidden; + width:20px; + height:20px; + overflow:hidden; + border:1px solid; + z-index:20; +} +.ext-border-box .x-layout-collapsed{ + width:22px; + height:22px; +} +.x-layout-collapsed-over{ + cursor:pointer; +} +.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{ + position:absolute; + top:0; + left:0; + width:20px; + height:20px; +} +.x-layout-split{ + position:absolute; + height:5px; + width:5px; + line-height:1px; + font-size:1px; + z-index:3; + background-color:transparent; +} +.ext-strict .ext-ie6 .x-layout-split{ + background-color: #fff !important; + filter: alpha(opacity=1); +} +.x-layout-split-h{ + background-image:url(../images/default/s.gif); + background-position: left; +} +.x-layout-split-v{ + background-image:url(../images/default/s.gif); + background-position: top; +} +.x-column-layout-ct { + overflow:hidden; + zoom:1; +} +.x-column { + float:left; + padding:0; + margin:0; + overflow:hidden; + zoom:1; +} +.x-column-inner { + overflow:hidden; + zoom:1; +} +.x-layout-mini { + position:absolute; + top:0; + left:0; + display:block; + width:5px; + height:35px; + cursor:pointer; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); +} +.x-layout-mini-over, .x-layout-collapsed-over .x-layout-mini{ + opacity:1; + -moz-opacity:1; + filter:none; +} +.x-layout-split-west .x-layout-mini { + top:48%; +} +.x-layout-split-east .x-layout-mini { + top:48%; +} +.x-layout-split-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} +.x-layout-split-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} +.x-layout-cmini-west .x-layout-mini { + top:48%; +} +.x-layout-cmini-east .x-layout-mini { + top:48%; +} +.x-layout-cmini-north .x-layout-mini { + left:48%; + height:5px; + width:35px; +} +.x-layout-cmini-south .x-layout-mini { + left:48%; + height:5px; + width:35px; +} +.x-layout-cmini-west, .x-layout-cmini-east { + border:0 none; + width:5px !important; + padding:0; + background:transparent; +} +.x-layout-cmini-north, .x-layout-cmini-south { + border:0 none; + height:5px !important; + padding:0; + background:transparent; +} +.x-viewport, .x-viewport body { + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; +} +.x-abs-layout-item { + position:absolute !important; + left:0; + top:0; +} +.x-abs-layout-container { + position:relative; +} +.ext-ie input.x-abs-layout-item, .ext-ie textarea.x-abs-layout-item { + margin:0; +} +.x-box-layout-ct { + overflow:hidden; + zoom:1; +} +.x-box-inner { + overflow:hidden; + zoom:1; + position:relative; + left:0; + top:0; +} +.x-box-item { + position:absolute !important; + left:0; + top:0; +} +.x-border-layout-ct { + position: relative; +} +.x-progress-wrap { + border:1px solid; + overflow:hidden; +} +.x-progress-inner { + height:18px; + background:repeat-x; + position:relative; +} +.x-progress-bar { + height:18px; + float:left; + width:0; + background: repeat-x left center; + border-top:1px solid; + border-bottom:1px solid; + border-right:1px solid; +} +.x-progress-text { + padding:1px 5px; + overflow:hidden; + position:absolute; + left:0; + text-align:center; +} +.x-progress-text-back { + line-height:16px; +} +.ext-ie .x-progress-text-back { + line-height:15px; +} +.x-slider { + zoom:1; + -moz-outline: none; + outline: 0 none; +} +.x-slider-thumb { + line-height: 0px; + font-size: 0px; + position: absolute; + background:transparent no-repeat 0 0; +} +.x-slider-inner { + position:relative; + left:0; + top:0; + overflow:visible; + zoom:1; +} +.x-slider-focus { + position:absolute; + left:0; + top:0; + width:1px; + height:1px; + line-height:1px; + font-size:1px; + -moz-outline:0 none; + outline:0 none; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: ignore + display:block; + overflow:hidden; +} +.x-slider-horz { + padding-left:7px; + background:transparent no-repeat 0 -22px; +} +.x-slider-horz .x-slider-end { + padding-right:7px; + zoom:1; + background:transparent no-repeat right -44px; +} +.x-slider-horz .x-slider-inner { + background:transparent repeat-x 0 0; + height:22px; +} +.x-slider-horz .x-slider-thumb { + width:14px; + height:15px; + left:0; + top:3px; +} +.x-slider-horz .x-slider-thumb-over { + background-position: -14px -15px; +} +.x-slider-horz .x-slider-thumb-drag { + background-position: -28px -30px; +} +.x-slider-vert { + padding-top:7px; + background:transparent no-repeat -44px 0; + width:22px; +} +.x-slider-vert .x-slider-end { + padding-bottom:7px; + zoom:1; + background:transparent no-repeat -22px bottom; +} +.x-slider-vert .x-slider-inner { + background:transparent repeat-y 0 0; +} +.x-slider-vert .x-slider-thumb { + width:15px; + height:14px; + left:3px; + bottom:0; +} +.x-slider-vert .x-slider-thumb-over { + background-position: -15px -14px; +} +.x-slider-vert .x-slider-thumb-drag { + background-position: -30px -28px; +} +.x-window-dlg .x-window-body { + border:0 none !important; + padding:5px 10px; + overflow:hidden !important; +} +.x-window-dlg .x-window-mc { + border:0 none !important; +} +.x-window-dlg .ext-mb-input { + margin-top:4px; + width:95%; +} +.x-window-dlg .ext-mb-textarea { + margin-top:4px; +} +.x-window-dlg .x-progress-wrap { + margin-top:4px; +} +.ext-ie .x-window-dlg .x-progress-wrap { + margin-top:6px; +} +.x-window-dlg .x-msg-box-wait { + background:transparent no-repeat left; + display:block; + width:300px; + padding-left:18px; + line-height:18px; +} +.x-window-dlg .ext-mb-icon { + float:left; + width:47px; + height:32px; +} +.ext-ie .x-window-dlg .ext-mb-icon { + width:44px; +} +.x-window-dlg .x-dlg-icon .ext-mb-content{ + zoom: 1; margin-left: 47px; +} +.x-window-dlg .ext-mb-info, .x-window-dlg .ext-mb-warning, .x-window-dlg .ext-mb-question, .x-window-dlg .ext-mb-error { + background:transparent no-repeat top left; +} +.ext-gecko2 .ext-mb-fix-cursor { + overflow:auto; +} +.arrow-top { + background: url(../images/gxt/icons/top2.gif) no-repeat center left !important; +} +.arrow-bottom { + background: url(../images/gxt/icons/bottom2.gif) no-repeat center left !important; +} +.arrow-up { + background: url(../images/gxt/icons/up2.gif) no-repeat center left !important; +} +.arrow-down { + background: url(../images/gxt/icons/down2.gif) no-repeat center left !important; +} +.arrow-left { + background: url(../images/gxt/icons/left2.gif) no-repeat center left !important; +} +.arrow-double-left { + background: url(../images/gxt/icons/doubleleft2.gif) no-repeat center left !important; +} +.arrow-right { + background: url(../images/gxt/icons/right2.gif) no-repeat center left !important; +} +.arrow-double-right { + background: url(../images/gxt/icons/doubleright2.gif) no-repeat center left !important; +} +.x-info { + border-style: solid; + border-color: #99bbe8; + border-width: 0; + z-index: 99999999; +} + +.x-info-header { + overflow: hidden; + zoom: 1; + color: black; + font: bold 13px tahoma, arial, verdana, sans-serif; + padding: 5px 3px 4px 5px; + line-height: 15px; + background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 -1px; +} + +.x-info-body { + border-top: 0 none; + overflow: hidden; + background: white; + position: relative; /* added for item scroll positioning */ +} + +.x-info-header { + overflow: hidden; + zoom: 1; +} + +.x-info-tl .x-info-header { + color: #555555; + font-family: tahoma, arial, sans-serif; + font-size: 13px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: bold; + line-height: normal; + padding: 5px 0 4px 0; + border: 0 none; + background: transparent; +} + +.x-info-tl .x-info-icon,.x-window-tl .x-info-icon { + padding-left: 20px !important; + background-repeat: no-repeat; + background-position: 0 4px; + zoom: 1; +} + +.x-info-inline-icon { + width: 16px; + height: 16px; + background-repeat: no-repeat; + background-position: 0 0; + vertical-align: middle; + margin-right: 4px; + margin-top: -1px; + margin-bottom: -1px; +} + +.x-info-tc { + background: transparent url(../images/gxt/info/top-bottom.gif) repeat-x 0 0; + overflow: hidden; +} + +/* fix ie7 strict mode bug */ +.ext-ie7 .x-info-tc { + overflow: visible; +} + +.x-info-tl { + background: transparent url(../images/gxt/info/corners-sprite.gif) no-repeat 0 0; + padding-left: 6px; + zoom: 1; +} + +.x-info-tr { + background: transparent url(../images/gxt/info/corners-sprite.gif) no-repeat right 0; + zoom: 1; + padding-right: 6px; +} + +.x-info-bc { + background: transparent url(../images/default/panel/top-bottom.gif) repeat-x 0 bottom; + zoom: 1; + font-size: 0px; +} + +.x-info-bc .x-info-footer { + zoom: 1; +} + +.x-info-bl { + background: transparent url(../images/default/panel/corners-sprite.gif) no-repeat 0 bottom; + padding-left: 6px; + zoom: 1; +} + +.x-info-br { + background: transparent url(../images/default/panel/corners-sprite.gif) no-repeat right bottom; + padding-right: 6px; + zoom: 1; +} + +.x-info-mc { + border: 0 none; + padding: 0; + margin: 0; + font: normal 11px tahoma, arial, helvetica, sans-serif; + background: #dfe8f6; +} + +.x-info-mc .x-info-body { + background: transparent; + border: 0 none; +} + +.x-info-ml { + background: #fff url(../images/default/panel/left-right.gif) repeat-y 0 0; + padding-left: 6px; + zoom: 1; +} + +.x-info-mr { + background: transparent url(../images/default/panel/left-right.gif) repeat-y right 0; + padding-right: 6px; + zoom: 1; +} + +.x-info-bc .x-info-footer { + padding-bottom: 6px; +} + +.x-info-nofooter .x-info-bc,.x-panel-nofooter .x-info-bc { + height: 6px; + font-size: 0; + line-height: 0; +} + +.x-info-bwrap { + overflow: hidden; + zoom: 1; +} + +.x-info-body { + overflow: hidden; + zoom: 1; + color: #555555; + font-family: tahoma, arial, sans-serif; + font-size: 12px; + font-size-adjust: none; + font-style: normal; + font-variant: normal; + font-weight: normal; +}.x-combo-over { + border: 1px dotted #B5B4B4 !important; + background: #F1F1F1; + cursor: pointer; +} + +.my-list { + border: 1px solid #99BBE8; + -moz-outline: none; + outline: 0 none; + -moz-user-focus: normal; + background-color: white; + font-family: "Myriad Pro", "Myriad Web", "Tahoma", "Helvetica", "Arial", sans-serif; +} + +.my-list-notchecked { + background: url(../images/gxt/tree/notchecked.gif) no-repeat 0px 0px !important; + margin: 3px 0pt 0pt 0px; +} + +.my-list-checked { + background: url(../images/gxt/tree/checked.gif) no-repeat 0px 0px !important; + margin: 3px 0pt 0pt 0px; +} + +.ext-ie .my-list-notchecked { + margin: 2px 0pt 0pt 0px; +} + +.ext-ie .my-list-checked { + margin: 2px 0pt 0pt 0px; +} + +.my-list-flat { + border: 1px solid #6593cf; + -moz-outline: none; + outline: 0 none; + -moz-user-focus: normal; + background-color: white; + cursor: default; +} + +.my-list-item { + cursor: pointer; + -moz-outline: none; + outline: 0 none; + -moz-user-focus: normal; +} + +.my-list-flat .my-list-item { + height: 19px; + border: 1px solid white; +} + +.my-list-flat .my-list-item-over { + background-color: #F1F1F1; + border: 1px dotted #B5B4B4; +} + +.my-list-flat .my-list-item-sel { + background-color: #DFE8F6; + border: 1px dotted #9EB8ED; +} + +.my-list-flat .my-list-item-over .my-list-item-l { + background: none; +} + +.my-list-flat .my-list-item-over .my-list-item-icon,.my-list-flat .my-list-item-over .my-list-item-ml,.my-list-flat .my-list-item-over .my-list-item-c + { + background: none; +} + +.my-list-flat .my-list-item-over .my-list-item-r { + background: none; +} + +.my-list-flat .my-list-item-sel .my-list-item-l { + background: none; +} + +.my-list-flat .my-list-item-sel .my-list-item-icon,.my-list-flat .my-list-item-sel .my-list-item-ml,.my-list-flat .my-list-item-sel .my-list-item-c + { + background: none; +} + +.my-list-flat .my-list-item-sel .my-list-item-r { + background: none; +} + +.my-list-item-text { + font-size: 11px; + padding-top: 3px; + padding-left: 2px; + white-space: nowrap; + overflow: hidden; + line-height: 19px; +} + +.my-list-item-l div { + width: 5px; +} + +.my-list-item-ml { + width: 18px; +} + +.my-list-item-c { + width: 100%; +} + +.my-list-item-r div { + width: 3px; +} + +.my-list-item-over .my-list-item-l { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left -57px; +} + +.my-list-item-over .my-list-item-icon,.my-list-item-over .my-list-item-check,.my-list-item-over .my-list-item-c + { + background: url(../images/gxt/shared/select-19-bg.gif) repeat-x left -95px; +} + +.my-list-item-over .my-list-item-r { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right -76px; +} + +.my-list-item-sel .my-list-item-l { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left 0px; +} + +.my-list-item-sel .my-list-item-icon,.my-list-item-sel .my-list-item-check,.my-list-item-sel .my-list-item-c + { + background: url(../images/gxt/shared/select-19-bg.gif) left -38px; +} + +.my-list-item-sel .my-list-item-r { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right -19px; +}.x-view { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; + background-color: white; + cursor: default; + border: 1px solid #98C0F4; + overflow: auto; + padding: 0px; + zoom: 1; +} + +.x-view-item { + border: 1px solid #FFFFFF; + font-family: tahoma, arial, helvetica, sans-serif; + font-size: 12px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + overflow: hidden; + padding: 2px; + white-space: nowrap; +} + +.x-view-highlightrow { + border: 1px dotted #545352 !important; +} + +.x-view-item-over { + background: #efefef url(../images/default/grid/row-over.gif) repeat-x left top; + border: 1px dotted #dddddd !important; + cursor: pointer; +} + +.x-view-item-sel { + background: #DFE8F6 none repeat scroll 0%; + border: 1px dotted #A3BAE9 !important; + cursor: pointer; +} +.x-view-item-check { + padding: 0px; +} +.x-view-item-check td { + font-family: tahoma, arial, helvetica, sans-serif; + font-size: 12px; + font-size-adjust: none; + font-stretch: normal; + font-style: normal; + font-variant: normal; + font-weight: normal; + line-height: normal; + white-space: nowrap; + vertical-align: middle; + padding-left: 1px; +} + +.x-splitbar-shim { + filter: alpha(opacity = 1); + opacity: 0; + position: absolute; + width: 100%; + height: 100%; + z-index: 10; + background-color: white; + -moz-user-select: none; + -khtml-user-select: none; + user-select: none; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.x-vsplitbar { + background: url(../images/default/s.gif); + position: absolute; + z-index: 3; + cursor: e-resize; + cursor: col-resize; +} + +.x-hsplitbar { + background: url(../images/default/s.gif); + position: absolute; + font-size: 1px; + line-height: 1px; + z-index: 3; + cursor: s-resize; + cursor: row-resize; +} + +.x-splitbar-proxy { + position: absolute; + background-color: #929090; + font-size: 1px; + line-height: 1px; + z-index: 200; +} + +.my-splitbar-shim { + filter: alpha(opacity = 1); + opacity: 0; + position: absolute; + width: 100%; + height: 100%; + z-index: 10; + background-color: white; + -moz-user-select: none; + -khtml-user-select: none; + user-select: none; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-splitbar-transparent { + background: none; + font-size: 1px; + line-height: 1px; + z-index: 2000; +} + +.my-splitbar-proxy { + position: absolute; + background-color: #929090; + font-size: 1px; + line-height: 1px; + z-index: 200; +}.x-status { + padding: 0 4px; + height: 21px; + line-height: 21px !important; + cursor: default; +} +.x-status .x-status-text{ + padding: 2px; + line-height: 21px !important; +} +.x-status-icon { + padding-left: 25px !important; + background: transparent no-repeat left center; +} +.x-status-busy { + background-image: url(../images/default/grid/loading.gif); +} +.x-status-text-panel { + border: 1px solid; + border-color: #99bbe8 #fff #fff #99bbe8; +} +.my-tbl { + border: 1px solid #99BBE8; + cursor: default; + background-color: white; + overflow: hidden; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 11px; + table-layout: fixed; +} + +.my-tbl-col-overflow { + overflow: hidden; +} + +.ext-ie .my-tbl-col-overflow { + +} + +.my-tbl-col-text { + color: black; + padding: 5px 4px 0 4px; + display: block; + white-space: nowrap; + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 11px; +} + +.my-tbl-col { + border-right: 1px solid #D5D5D5; + background: url(../images/gxt/table/vs-column-bg.gif) repeat-x; +} + +.my-tbl-col-splitter { + position: absolute; + top: 0; + width: 6px; + z-index: 100; + height: 100%; + right: 0px; +} + +.my-tbl-col-over { + background: url(../images/gxt/table/vs-column-bg.gif) repeat-x 0px -24px; +} + +.my-tbl-col-sort { + background-position: 0px -48px; +} + +.my-icon-asc { + background-image: url(../images/gxt/icons/hmenu-asc.gif) !important; +} + +.my-icon-desc { + background-image: url(../images/gxt/icons/hmenu-desc.gif) !important; +} + +.my-tbl-col-asc { + background: url(../images/gxt/table/vsort-asc.gif) no-repeat 50% top; +} + +.my-tbl-col-desc { + background: url(../images/gxt/table/vsort-desc.gif) no-repeat 50% top; +} + +.my-tbl-col-splitter { + background: none; +} + +.my-tbl-data { + background-color: white; + overflow: hidden; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tbl-item { + border-top: 1px solid white; + border-bottom: 1px solid white; + border-bottom: 1px solid #EDEDED; + cursor: default; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tbl-item table { + -moz-outline: none; + -moz-user-focus: normal; + table-layout: fixed; + outline: 0 none; +} + +.my-tbl-data .my-tbl-item-cell { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tbl-item td { + -moz-user-select: none; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tbl-vlines .my-tbl-data .my-tbl-item-cell-overflow { + border-right: 1px solid #EDEDED; +} + +.my-tbl-data .my-tbl-item-cell-overflow { + white-space: nowrap; + overflow: hidden; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tbl-data .my-tbl-item-cell-text { + padding: 3px 4px; + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 11px; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-tbl-data .my-tbl-item-cell-widget { + padding: 1px 4px; +} + +.my-tbl-data tr { + overflow: hidden; +} + +.my-tbl-item-over { + border-top: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + background: #efefef url(../images/default/grid/row-over.gif) repeat-x left top; +} + +.my-tbl-item-sel { + background-image: none !important; + background-color: #D9E1ED !important; + border-top: 1px dotted #9EB8ED !important; + border-bottom: 1px dotted #9EB8ED !important; +} + +.ext-ie .my-tbl TD .x-form-text { + POSITION: static; + TOP: 0px; +}.tree-folder { + background: url(../images/gxt/icons/folder-closed.gif) no-repeat -1px -1px; +} + +.tree-folder-open { + background: url(../images/gxt/icons/folder.gif) no-repeat -1px -1px; +} + +.my-treetbl-tree { + cursor: default; +} + +.my-treetblitem,.my-treetblitem table,.my-treetblitem table td { + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-treetblitem td { + height: 19px; +} + +.my-treetbl-indent { + line-height: 1px; + font-size: 1px; +} + +.my-treetbl-joint div { + width: 15px; + height: 19px; + line-height: 1px; + font-size: 1px; +} + +.my-treetbl-left,.my-treetbl-left div,.my-treetbl-right { + line-height: 1px; + font-size: 1px; + width: 3px; +} + +.my-treetbl-left div,.my-treetbl-right div { + width: 3px; +} + +.my-treetbl-check div { + width: 17px; + height: 19px; + line-height: 1px; + font-size: 1px; + display: block; +} + +.my-treetbl-icon div { + width: 16px; + height: 16px; + margin-top: 1px; + cursor: pointer; + background-repeat: no-repeat; + background-position: center; +} + +.my-ie .my-treetbl-icon { + padding-top: 2px; +} + +.my-ie .my-treetbl-icon div { + position: static; +} + +.my-treetbl-item-text span { + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 12px; + white-space: nowrap; + padding-left: 3px; + padding-right: 3px; + display: block; + height: 15px; + cursor: pointer; +} + +.my-treetbl-over .my-treetbl-left { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left -57px; +} + +.my-treetbl-over .my-treetbl-right { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right -76px; +} + +.my-treetbl-over .my-treetbl-check,.my-treetbl-over .my-treetbl-icon,.my-treetbl-over .my-treetbl-item-text + { + background: url(../images/gxt/shared/select-19-bg.gif) left -95px; +} + +.my-treetbl-sel .my-treetbl-left { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat left 0px; +} + +.my-treetbl-sel .my-treetbl-right { + background: url(../images/gxt/shared/select-19-bg.gif) no-repeat right -19px; +} + +.my-treetbl-sel .my-treetbl-check,.my-treetbl-sel .my-treetbl-icon,.my-treetbl-sel .my-treetbl-item-text + { + background: url(../images/gxt/shared/select-19-bg.gif) left -38px; +} + +.my-treetbl-close { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px 1px; +} + +.my-treetbl-open { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px -32px; +} + +.my-treetbl-joint-over .my-treetbl-open { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px -48px; +} + +.my-treetbl-joint-over .my-treetbl-close { + background: url(../images/gxt/tree/vnode_transparent.gif) no-repeat 0px -15px; +} + +.my-treetbl-notchecked { + background: url(../images/gxt/tree/notchecked.gif) no-repeat 0px 50%; +} + +.my-treetbl-checked { + background: url(../images/gxt/tree/checked.gif) no-repeat 0px 50%; +} + +.my-treetbl-loading .tree-folder { + background: url(../images/gxt/icons/wait.gif) no-repeat 0px -1px; +} + +.my-treetbl-loading .my-treetbl-item-text span { + font-style: italic; +} + +.my-treetbl { + border: 1px solid #99BBE8; + cursor: default; + background-color: white; + overflow: hidden; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-treetbl-col-overflow { + overflow: hidden; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-treetbl-col-text { + color: black; + padding: 5px 4px 0 4px; + display: block; + white-space: nowrap; + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 12px; +} + +.my-treetbl-col { + border-right: 1px solid #D5D5D5; + background: url(../images/gxt/table/vs-column-bg.gif) repeat-x; +} + +.my-treetbl-col-splitter { + position: absolute; + top: 0; + width: 6px; + z-index: 100; + height: 100%; + right: 0px; +} + +.my-treetbl-col-over { + background: url(../images/gxt/table/vs-column-bg.gif) repeat-x 0px -24px; +} + +.my-treetbl-col-sort { + background-position: 0px -48px; +} + +.my-treetbl-col-asc { + background: url(../images/gxt/table/vsort-asc.gif) no-repeat 50% top; +} + +.my-treetbl-col-desc { + background: url(../images/gxt/table/vsort-desc.gif) no-repeat 50% top; +} + +.my-treetbl-col-splitter { + background: none; +} + +.my-treetbl-data { + background-color: white; + overflow: hidden; +} + +.my-treetbl-data .my-treetbl-cell { + height: 20px; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-treetbl-data .my-treetbl-cell-overflow { + white-space: nowrap; + overflow: hidden; +} + +.my-treetbl-data .my-treetbl-cell-text { + padding: 0px 0px; + font-family: arial, tahoma, helvetica, sans-serif; + font-size: 12px; +} + +.my-treetbl-data tr { + overflow: hidden; +} + +.my-treetbl-item { + border-top: 1px solid white; + border-bottom: 1px solid white; + border-bottom: 1px solid #EDEDED; + cursor: default; + -moz-outline: none; + -moz-user-focus: normal; + outline: 0 none; +} + +.my-treetbl-item-over { + border-top: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + background: #efefef url(../images/default/grid/row-over.gif) repeat-x left top; +} + +.my-treetbl-item-sel { + background-image: none; + background-color: #D9E1ED; + border-top: 1px dotted #9EB8ED; + border-bottom: 1px dotted #9EB8ED; +} + +.my-treetbl .x-grid3-td-numberer { + background: transparent url(../images/gxt/tree/tree-table-special-col.gif) repeat-y + scroll left center; + height: 19px; + line-height: normal; + padding-left: 0px; + margin-left: 0px; +} + +.x-grid3-td-numberer div { + font-size: 11px; + font-family: "segoe ui", tahoma, arial, sans-serif; + color: #444444; + padding: 3px 0px 0 5px !important; +} + +.ext-ie .my-treetbl .x-grid3-td-numberer { + height: 20px; +} + +.my-treetbl-item-sel .x-grid3-td-numberer { + background: transparent url(../images/gxt/tree/tree-table-special-col-sel.gif) repeat-y + scroll left center; +}.ext-el-mask { + background-color: #ccc; +} +.ext-el-mask-msg { + border-color:#6593cf; + background-color:#c3daf9; + background-image:url(../images/default/box/tb-blue.gif); +} +.ext-el-mask-msg div { + background-color: white; + border-color:#a3bad9; + color:#222; + font:normal 11px tahoma, arial, helvetica, sans-serif; +} +.x-mask-loading div { + background-color:#fbfbfb; + background-image:url(../images/default/grid/loading.gif); +} +.x-item-disabled { + color: gray; +} +.x-item-disabled * { + color: gray !important; +} +.x-splitbar-proxy { + background-color: #aaa; +} +.x-color-palette a { + border-color:#fff; +} +.x-color-palette a.x-color-palette-hover, .x-color-palette a.x-color-palette-sel { + border-color:#8bb8f3; + background-color: #deecfd; +} +.x-color-palette em { + border-color:#aca899; +} +.x-ie-shadow { + background-color:#777; +} +.x-shadow .xsmc { + background-image: url(../images/default/shadow-c.png); +} +.x-shadow .xsml, .x-shadow .xsmr { + background-image: url(../images/default/shadow-lr.png); +} +.x-shadow .xstl, .x-shadow .xstc, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbc, .x-shadow .xsbr{ + background-image: url(../images/default/shadow.png); +} +.loading-indicator { + font-size: 11px; + background-image: url(../images/default/grid/loading.gif); +} +.x-spotlight { + background-color: #ccc; +} +.x-aria-focusframe-side { + background-color: #15428B; + line-height: 2px; + font-size: 2px; +} +.x-tab-panel-header, .x-tab-panel-footer { + background-color: #deecfd; + border-color:#8db2e3; + overflow:hidden; + zoom:1; +} +.x-tab-panel-header, .x-tab-panel-footer { + border-color:#8db2e3; +} +ul.x-tab-strip-top{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-bg.gif); + border-bottom-color:#8db2e3; +} +ul.x-tab-strip-bottom{ + background-color:#cedff5; + background-image: url(../images/default/tabs/tab-strip-btm-bg.gif); + border-top-color:#8db2e3; +} +.x-tab-panel-header-plain .x-tab-strip-spacer, +.x-tab-panel-footer-plain .x-tab-strip-spacer { + border-color:#8db2e3; + background-color: #deecfd; +} +.x-tab-strip span.x-tab-strip-text { + font:normal 11px tahoma,arial,helvetica; + color:#416aa3; +} +.x-tab-strip-over span.x-tab-strip-text { + color:#15428b; +} +.x-tab-strip-active span.x-tab-strip-text { + color:#15428b; + font-weight:bold; +} +.x-tab-strip-disabled .x-tabs-text { + color:#aaaaaa; +} +.x-tab-strip-top .x-tab-right, .x-tab-strip-top .x-tab-left, .x-tab-strip-top .x-tab-strip-inner{ + background-image: url(../images/default/tabs/tabs-sprite.gif); +} +.x-tab-strip-bottom .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-inactive-right-bg.gif); +} +.x-tab-strip-bottom .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-inactive-left-bg.gif); +} +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background-image: url(../images/default/tabs/tab-btm-right-bg.gif); +} +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background-image: url(../images/default/tabs/tab-btm-left-bg.gif); +} +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + background-image:url(../images/default/tabs/tab-close.gif); +} +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + background-image:url(../images/default/tabs/tab-close.gif); +} +.x-tab-panel-body { + border-color:#8db2e3; + background-color:#fff; +} +.x-tab-panel-body-top { + border-top: 0 none; +} +.x-tab-panel-body-bottom { + border-bottom: 0 none; +} +.x-tab-scroller-left { + background-image:url(../images/default/tabs/scroll-left.gif); + border-bottom-color:#8db2e3; +} +.x-tab-scroller-left-over { + background-position: 0 0; +} +.x-tab-scroller-left-disabled { + background-position: -18px 0; + opacity:.5; + -moz-opacity:.5; + filter:alpha(opacity=50); + cursor:default; +} +.x-tab-scroller-right { + background-image:url(../images/default/tabs/scroll-right.gif); + border-bottom-color:#8db2e3; +} +.x-tab-panel-bbar .x-toolbar, .x-tab-panel-tbar .x-toolbar { + border-color:#99bbe8; +} +.x-form-field { + font: normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-text,textarea.x-form-field { + background-color: #fff; + background-image: url(../images/default/form/text-bg.gif); + border-color: #b5b8c8; +} + +.x-form-select-one { + background-color: #fff; + border-color: #b5b8c8; +} + +.x-form-check-group-label { + border-bottom: 1px solid #99bbe8; + color: #15428b; +} + +.x-editor .x-form-check-wrap { + background-color: #fff; +} + +.x-form-field-wrap .x-form-trigger { + background-image: url(../images/default/form/trigger.gif); + border-bottom-color: #b5b8c8; +} + +.x-form-field-wrap .x-form-date-trigger { + background-image: url(../images/default/form/date-trigger.gif); +} + +.x-form-field-wrap .x-form-clear-trigger { + background-image: url(../images/default/form/clear-trigger.gif); +} + +.x-form-field-wrap .x-form-search-trigger { + background-image: url(../images/default/form/search-trigger.gif); +} + +.x-trigger-wrap-focus .x-form-trigger { + border-bottom-color: #7eadd9; +} + +.x-item-disabled .x-form-trigger-over { + border-bottom-color: #b5b8c8; +} + +.x-item-disabled .x-form-trigger-click { + border-bottom-color: #b5b8c8; +} + +.x-form-focus,textarea.x-form-focus { + border-color: #7eadd9; +} + +.x-form-invalid,textarea.x-form-invalid { + background-color: #fff; + background-image: url(../images/default/grid/invalid_line.gif); + border-color: #c30; +} + +.ext-safari .x-form-invalid { + background-color: #fee; + border-color: #ff7870; +} + +.x-form-inner-invalid,textarea.x-form-inner-invalid { + background-color: #fff; + background-image: url(../images/default/grid/invalid_line.gif); +} + +.x-form-grow-sizer { + font: normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-item { + font: normal 12px tahoma, arial, helvetica, sans-serif; +} + +.x-form-invalid-msg { + color: #c0272b; + font: normal 11px tahoma, arial, helvetica, sans-serif; + background-image: url(../images/default/shared/warning.gif); +} + +.x-form-empty-field { + color: gray; +} + +.x-small-editor .x-form-field { + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.ext-safari .x-small-editor .x-form-field { + font: normal 12px arial, tahoma, helvetica, sans-serif; +} + +.x-form-invalid-icon { + background-image: url(../images/default/form/exclamation.gif); +} + +.x-fieldset { + border-color: #b5b8c8; +} + +.x-fieldset legend { + font: bold 11px tahoma, arial, helvetica, sans-serif; + color: #15428b; +} + +.x-editor .x-form-check-wrap { + border-color: #7eadd9; +} + +.x-spinner-field .x-form-spinner-up { + background-image: url('../images/default/form/spinner.gif'); +} +.x-spinner-field .x-form-spinner-down { + background-image: url('../images/default/form/spinner.gif'); +}.x-btn{ + font:normal 11px tahoma, verdana, helvetica; +} +.x-btn button{ + font:normal 11px arial,tahoma,verdana,helvetica; + color:#333; +} +.x-btn em { + font-style:normal; + font-weight:normal; +} +.x-btn-tl, .x-btn-tr, .x-btn-tc, .x-btn-ml, .x-btn-mr, .x-btn-mc, .x-btn-bl, .x-btn-br, .x-btn-bc{ + background-image:url(../images/default/button/btn.gif); +} +.x-btn-click .x-btn-text, .x-btn-menu-active .x-btn-text, .x-btn-pressed .x-btn-text{ + color:#000; +} +.x-btn-disabled *{ + color:gray !important; +} +.x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/button/arrow.gif); +} +.x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow.gif); +} +.x-btn-over .x-btn-mc em.x-btn-split, .x-btn-click .x-btn-mc em.x-btn-split, .x-btn-menu-active .x-btn-mc em.x-btn-split, .x-btn-pressed .x-btn-mc em.x-btn-split { + background-image:url(../images/default/button/s-arrow-o.gif); +} +.x-btn-mc em.x-btn-arrow-bottom { + background-image:url(../images/default/button/s-arrow-b-noline.gif); +} +.x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-b.gif); +} +.x-btn-over .x-btn-mc em.x-btn-split-bottom, .x-btn-click .x-btn-mc em.x-btn-split-bottom, .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom, .x-btn-pressed .x-btn-mc em.x-btn-split-bottom { + background-image:url(../images/default/button/s-arrow-bo.gif); +} +.x-btn-group-header { + color: #3e6aaa; +} +.x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} +.x-btn-group-tl { + background-image: url(../images/default/button/group-cs.gif); +} +.x-btn-group-tr { + background-image: url(../images/default/button/group-cs.gif); +} +.x-btn-group-bc { + background-image: url(../images/default/button/group-tb.gif); +} +.x-btn-group-bl { + background-image: url(../images/default/button/group-cs.gif); +} +.x-btn-group-br { + background-image: url(../images/default/button/group-cs.gif); +} +.x-btn-group-ml { + background-image: url(../images/default/button/group-lr.gif); +} +.x-btn-group-mr { + background-image: url(../images/default/button/group-lr.gif); +} +.x-btn-group-notitle .x-btn-group-tc { + background-image: url(../images/default/button/group-tb.gif); +} +.x-toolbar { + border-color: #a9bfd3; + background-color: #d0def0; + background-image: url(../images/default/toolbar/bg.gif); +} + +.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label { + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-toolbar .x-item-disabled { + color: gray; +} + +.x-toolbar .x-item-disabled * { + color: gray; +} + +.x-toolbar .x-btn-mc em.x-btn-split { + background-image: url(../images/default/button/s-arrow-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split,.x-toolbar .x-btn-click .x-btn-mc em.x-btn-split,.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split,.x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split + { + background-image: url(../images/default/button/s-arrow-o.gif); +} + +.x-toolbar .x-btn-mc em.x-btn-split-bottom { + background-image: url(../images/default/button/s-arrow-b-noline.gif); +} + +.x-toolbar .x-btn-over .x-btn-mc em.x-btn-split-bottom,.x-toolbar .x-btn-click .x-btn-mc em.x-btn-split-bottom,.x-toolbar .x-btn-menu-active .x-btn-mc em.x-btn-split-bottom,.x-toolbar .x-btn-pressed .x-btn-mc em.x-btn-split-bottom + { + background-image: url(../images/default/button/s-arrow-bo.gif); +} + +.x-toolbar .xtb-sep { + background-image: url(../images/default/grid/grid-blue-split.gif); +} + +.x-tbar-page-first { + background-image: url(../images/default/grid/page-first.gif) !important; +} + +.x-tbar-refresh { + background-image: url(../images/default/grid/refresh.gif) !important; +} + +.x-tbar-page-last { + background-image: url(../images/default/grid/page-last.gif) !important; +} + +.x-tbar-page-next { + background-image: url(../images/default/grid/page-next.gif) !important; +} + +.x-tbar-page-prev { + background-image: url(../images/default/grid/page-prev.gif) !important; +} + +.x-tbar-loading { + background-image: url(../images/default/grid/loading.gif) !important; +} + +.x-item-disabled .x-tbar-page-first { + background-image: url(../images/default/grid/page-first-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-last { + background-image: url(../images/default/grid/page-last-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-next { + background-image: url(../images/default/grid/page-next-disabled.gif) !important; +} + +.x-item-disabled .x-tbar-page-prev { + background-image: url(../images/default/grid/page-prev-disabled.gif) !important; +} + +.x-paging-info { + color: #444; +} + +.x-toolbar-more-icon { + background-image: url(../images/default/toolbar/more.gif) !important; +}.x-resizable-handle { + background-color:#fff; +} +.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east, +.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west +{ + background-image:url(../images/default/sizer/e-handle.gif); +} +.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south, +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north +{ + background-image:url(../images/default/sizer/s-handle.gif); +} +.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{ + background-image:url(../images/default/sizer/s-handle.gif); +} +.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{ + background-image:url(../images/default/sizer/se-handle.gif); +} +.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{ + background-image:url(../images/default/sizer/nw-handle.gif); +} +.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{ + background-image:url(../images/default/sizer/ne-handle.gif); +} +.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{ + background-image:url(../images/default/sizer/sw-handle.gif); +} +.x-resizable-proxy{ + border-color:#3b5a82; +} +.x-resizable-overlay{ + background-color:#fff; +} +.x-grid3 { + background-color: #fff; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border-color: #99bbe8; +} + +.x-grid3-hd-row .x-grid3-hd,.x-grid3-row .x-grid3-cell,.x-grid3-summary-row .x-grid3-cell { + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-hd-row .x-grid3-hd { + border-left-color: #eee; + border-right-color: #d0d0d0; +} + +.x-grid-row-loading { + background-color: #fff; + background-image: url(../images/default/shared/loading-balls.gif); +} + +.x-grid3-row { + border-color: #ededed; + border-top-color: #fff; +} + +.x-grid3-row-alt { + background-color: #fafafa; +} + +.x-grid3-row-over { + border-color: #ddd; + background-color: #efefef; + background-image: url(../images/default/grid/row-over.gif); +} + +.x-grid3-resize-proxy { + background-color: #777; +} + +.x-grid3-resize-marker { + background-color: #777; +} + +.x-grid3-header { + background-color: #f9f9f9; + background-image: url(../images/default/grid/grid3-hrow.gif); +} + +.x-grid3-header-pop { + border-left-color: #d0d0d0; +} + +.x-grid3-header-pop-inner { + border-left-color: #eee; + background-image: url(../images/default/grid/hd-pop.gif); +} + +td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open { + border-left-color: #aaccf6; + border-right-color: #aaccf6; +} + +td.x-grid3-hd-over .x-grid3-hd-inner,td.sort-desc .x-grid3-hd-inner,td.sort-asc .x-grid3-hd-inner,td.x-grid3-hd-menu-open .x-grid3-hd-inner + { + background-color: #ebf3fd; + background-image: url(../images/default/grid/grid3-hrow-over.gif); +} + +.sort-asc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_asc.gif); +} + +.sort-desc .x-grid3-sort-icon { + background-image: url(../images/default/grid/sort_desc.gif); +} + +.x-grid3-cell-text,.x-grid3-hd-text { + color: #000; +} + +.x-grid3-split { + background-image: url(../images/default/grid/grid-split.gif); +} + +.x-grid3-hd-text { + color: #15428b; +} + +.x-dd-drag-proxy .x-grid3-hd-inner { + background-color: #ebf3fd; + background-image: url(../images/default/grid/grid3-hrow-over.gif); + border-color: #aaccf6; +} + +.col-move-top { + background-image: url(../images/default/grid/col-move-top.gif); +} + +.col-move-bottom { + background-image: url(../images/default/grid/col-move-bottom.gif); +} + +.x-grid3-highlightrow { + border: 1px dotted #545352; +} + +.x-grid3-row-selected { + background-image: none !important; + background-color: #dfe8f6 !important; + border-color: #a3bae9; +} + +.x-grid3-cell-selected { + background-color: #b8cfee !important; + color: #000; +} + +.x-grid3-group-selected { + background-color: #b8cfee !important; +} + +.x-grid3-cell-selected span { + color: #000 !important; +} + +.x-grid3-cell-selected .x-grid3-cell-text { + color: #000; +} + +.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker { + background-color: #ebeadb !important; + background-image: url(../images/default/grid/grid-hrow.gif) !important; + color: #000; + border-top-color: #fff; + border-right-color: #6fa0df !important; +} + +.x-grid3-locked td.x-grid3-row-marker div,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div { + color: #15428b !important; +} + +.x-grid3-dirty-cell { + background-image: url(../images/default/grid/dirty.gif); +} + +.x-grid3-invalid-cell { + background-image: url(../images/default/grid/invalid_line.gif); +} + +.x-grid3-topbar,.x-grid3-bottombar { + font: normal 11px arial, tahoma, helvetica, sans-serif; +} + +.x-grid3-bottombar .x-toolbar { + border-top-color: #a9bfd3; +} + +.x-props-grid .x-grid3-td-name .x-grid3-cell-inner { + background-image: url(../images/default/grid/grid3-special-col-bg.gif) !important; + color: #000 !important; +} + +.x-props-grid .x-grid3-body .x-grid3-td-name { + background-color: #fff !important; + border-right-color: #eee; +} + +.xg-hmenu-sort-asc .x-menu-item-icon { + background-image: url(../images/default/grid/hmenu-asc.gif); +} + +.xg-hmenu-sort-desc .x-menu-item-icon { + background-image: url(../images/default/grid/hmenu-desc.gif); +} + +.xg-hmenu-lock .x-menu-item-icon { + background-image: url(../images/default/grid/hmenu-lock.gif); +} + +.xg-hmenu-unlock .x-menu-item-icon { + background-image: url(../images/default/grid/hmenu-unlock.gif); +} + +.x-grid3-hd-btn { + background-color: #c3daf9; + background-image: url(../images/default/grid/grid3-hd-btn.gif); +} + +.x-grid3-body .x-grid3-td-expander { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-expander { + background-image: url(../images/default/grid/row-expand-sprite.gif); +} + +.x-grid3-body .x-grid3-td-checker { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-row-checker,.x-grid3-hd-checker { + background-image: url(../images/default/grid/row-check-sprite.gif); +} + +.x-grid3-body .x-grid3-td-numberer { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { + color: #444; +} + +.x-grid3-body .x-grid3-td-row-icon { + background-image: url(../images/default/grid/grid3-special-col-bg.gif); +} + +.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander + { + background-image: url(../images/default/grid/grid3-special-col-sel-bg.gif); +} + +.x-grid3-check-col { + background-image: url(../images/default/menu/unchecked.gif); +} + +.x-grid3-check-col-on { + background-image: url(../images/default/menu/checked.gif); +} + +.x-grid-group,.x-grid-group-body,.x-grid-group-hd { + zoom: 1; +} + +.x-grid-group-hd { + border-bottom-color: #99bbe8; +} + +.x-grid-group-hd .x-grid-group-div { + background-image: url(../images/default/grid/group-expand-sprite.gif); + color: #3764a0; + font: bold 11px tahoma, arial, helvetica, sans-serif; +} + +.x-group-by-icon { + background-image: url(../images/default/grid/group-by.gif); +} + +.x-cols-icon { + background-image: url(../images/default/grid/columns.gif); +} + +.x-show-groups-icon { + background-image: url(../images/default/grid/group-by.gif); +} + +.x-grid-empty { + color: gray; + font: normal 11px tahoma, arial, helvetica, sans-serif; +} + +.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { + border-right-color: #ededed; +} + +.x-grid-with-col-lines .x-grid3-row-selected { + border-top-color: #a3bae9; +} + +.x-grid3-check-col-disabled { + background-color: transparent; + background-image: url(../images/gxt/menu/disabledcheck.gif); +} + +.x-row-editor-header { + background: transparent url(../images/gxt/grid/row-editor-bg.gif) repeat-x 0 0; +} + +.x-row-editor-footer { + background: transparent url(../images/gxt/grid/row-editor-bg.gif) repeat-x 0 -2px; +} + +.x-row-editor-body { + background: #ebf2fb; +} + +.x-row-editor .x-btns { + background: transparent url(../images/gxt/grid/row-editor-btns.gif) no-repeat 0 0; +} + +.x-row-editor .x-btns .x-plain-bwrap { + background: transparent url(../images/gxt/grid/row-editor-btns.gif) no-repeat right -31px; +} + +.x-row-editor .x-btns .x-plain-body { + background: transparent url(../images/gxt/grid/row-editor-btns.gif) repeat-x 0 -62px; +} + +.x-inserted-row { + background-color: #f7f9cc +}.x-dd-drag-ghost{ + color:#000; + font: normal 11px arial, helvetica, sans-serif; + border-color: #ddd #bbb #bbb #ddd; + background-color:#fff; +} +.x-dd-drop-nodrop .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-no.gif); +} +.x-dd-drop-ok .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-yes.gif); +} +.x-dd-drop-ok-add .x-dd-drop-icon{ + background-image: url(../images/default/dd/drop-add.gif); +} +.x-view-selector { + background-color:#c3daf9; + border-color:#3399bb; +} +.x-tree-drop-ok-append .x-dd-drop-icon { + background-image: url(../images/default/tree/drop-add.gif); +} + +.x-tree-drop-ok-above .x-dd-drop-icon { + background-image: url(../images/default/tree/drop-over.gif); +} + +.x-tree-drop-ok-below .x-dd-drop-icon { + background-image: url(../images/default/tree/drop-under.gif); +} + +.x-tree-drop-ok-between .x-dd-drop-icon { + background-image: url(../images/default/tree/drop-between.gif); +} + +.x-tree3-loading { + background-image: url(../images/default/tree/loading.gif); +} + +.x-tree3-node-text { + font: normal 11px arial, tahoma, helvetica, sans-serif; + color: black; +}.x-date-picker { + border-color: #1b376c; + background-color:#fff; +} +.x-date-middle,.x-date-left,.x-date-right { + background-image: url(../images/default/shared/hd-sprite.gif); + color:#fff; + font:bold 11px "sans serif", tahoma, verdana, helvetica; +} +.x-date-middle .x-btn .x-btn-text { + color:#fff; +} +.x-date-middle .x-btn-mc em.x-btn-arrow { + background-image:url(../images/default/toolbar/btn-arrow-light.gif); +} +.x-date-right a { + background-image: url(../images/default/shared/right-btn.gif); +} +.x-date-left a{ + background-image: url(../images/default/shared/left-btn.gif); +} +.x-date-inner th { + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-bottom-color:#a3bad9; + font:normal 10px arial, helvetica,tahoma,sans-serif; + color:#233d6d; +} +.x-date-inner td { + border-color:#fff; +} +.x-date-inner a { + font:normal 11px arial, helvetica,tahoma,sans-serif; + color:#000; +} +.x-date-inner .x-date-active{ + color:#000; +} +.x-date-inner .x-date-selected a{ + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} +.x-date-inner .x-date-today a{ + border-color:darkred; +} +.x-date-inner .x-date-selected span{ + font-weight:bold; +} +.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a { + color:#aaa; +} +.x-date-bottom { + border-top-color:#a3bad9; + background-color:#dfecfb; + background-image:url(../images/default/shared/glass-bg.gif); +} +.x-date-inner .x-date-disabled a { + background-color:#eee; + color:#bbb; +} +.x-date-mmenu{ + background-color:#eee !important; +} +.x-date-mmenu .x-menu-item { + font-size:10px; + color:#000; +} +.x-date-mp { + background-color:#fff; +} +.x-date-mp td { + font:normal 11px arial, helvetica,tahoma,sans-serif; +} +.x-date-mp-btns button { + background-color:#083772; + color:#fff; + border-color: #3366cc #000055 #000055 #3366cc; + font:normal 11px arial, helvetica,tahoma,sans-serif; +} +.x-date-mp-btns { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); +} +.x-date-mp-btns td { + border-top-color: #c5d2df; +} +td.x-date-mp-month a,td.x-date-mp-year a { + color:#15428b; +} +td.x-date-mp-sel a { + background-color: #dfecfb; + background-image: url(../images/default/shared/glass-bg.gif); + border-color:#8db2e3; +} +.x-date-mp-ybtn a { + background-image:url(../images/default/panel/tool-sprites.gif); +} +td.x-date-mp-sep { + border-right-color:#c5d2df; +} +.x-tip .x-tip-close{ + background-image: url(../images/default/qtip/close.gif); +} +.x-tip .x-tip-tc, .x-tip .x-tip-tl, .x-tip .x-tip-tr, .x-tip .x-tip-bc, .x-tip .x-tip-bl, .x-tip .x-tip-br, .x-tip .x-tip-ml, .x-tip .x-tip-mr { + background-image: url(../images/default/qtip/tip-sprite.gif); +} +.x-tip .x-tip-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; +} +.x-tip .x-tip-ml { + background-color: #fff; +} +.x-tip .x-tip-header-text { + font: bold 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} +.x-tip .x-tip-body { + font: normal 11px tahoma,arial,helvetica,sans-serif; + color:#444; +} +.x-form-invalid-tip .x-tip-tc, .x-form-invalid-tip .x-tip-tl, .x-form-invalid-tip .x-tip-tr, .x-form-invalid-tip .x-tip-bc, +.x-form-invalid-tip .x-tip-bl, .x-form-invalid-tip .x-tip-br, .x-form-invalid-tip .x-tip-ml, .x-form-invalid-tip .x-tip-mr +{ + background-image: url(../images/default/form/error-tip-corners.gif); +} +.x-form-invalid-tip .x-tip-body { + background-image:url(../images/default/form/exclamation.gif); +} +.x-tip-anchor { + background-image:url(../images/default/qtip/tip-anchor-sprite.gif); +} +.x-menu { + border-color:#718bb7; + background-color:#f0f0f0; + background-image:url(../images/default/menu/menu.gif); +} +.x-menu-nosep { + background-image:none; +} +.x-menu-list-item{ + font:normal 11px tahoma,arial, sans-serif; +} +.x-menu-item-arrow{ + background-image:url(../images/default/menu/menu-parent.gif); +} +.x-menu-sep { + background-color:#e0e0e0; + border-bottom-color:#fff; +} +a.x-menu-item { + color:#222; +} +.x-menu-item-active { + background:#ebf3fd url(../images/default/menu/item-over.gif) repeat-x left bottom; + border:1px solid #aaccf6; + padding:0; +} +.x-menu-item-active a.x-menu-item { + color:#233d6d; +} + +.x-menu-plain { + background-color:#fff !important; +} +.x-menu .x-date-picker{ + border-color:#a3bad9; +} +.x-cycle-menu .x-menu-item-checked { + border-color:#a3bae9 !important; + background-color:#def8f6; +} +.x-menu-scroller-top { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-menu-scroller-bottom { + background-image:url(../images/default/layout/mini-bottom.gif); +} + +.x-menu-scroller{ + border-width: 1px 0; +} +.x-box-tl { + background-image: url(../images/default/box/corners.gif); +} +.x-box-tc { + background-image: url(../images/default/box/tb.gif); +} +.x-box-tr { + background-image: url(../images/default/box/corners.gif); +} +.x-box-ml { + background-image: url(../images/default/box/l.gif); +} +.x-box-mc { + background-color: #eee; + background-image: url(../images/default/box/tb.gif); + font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif; + color: #393939; + font-size: 12px; +} +.x-box-mc h3 { + font-size: 14px; + font-weight: bold; +} +.x-box-mr { + background-image: url(../images/default/box/r.gif); +} +.x-box-bl { + background-image: url(../images/default/box/corners.gif); +} +.x-box-bc { + background-image: url(../images/default/box/tb.gif); +} +.x-box-br { + background-image: url(../images/default/box/corners.gif); +} +.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr { + background-image: url(../images/default/box/corners-blue.gif); +} +.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc { + background-image: url(../images/default/box/tb-blue.gif); +} +.x-box-blue .x-box-mc { + background-color: #c3daf9; +} +.x-box-blue .x-box-mc h3 { + color: #17385b; +} +.x-box-blue .x-box-ml { + background-image: url(../images/default/box/l-blue.gif); +} +.x-box-blue .x-box-mr { + background-image: url(../images/default/box/r-blue.gif); +} +.x-combo-list { + border-color:#98c0f4; + background-color:#ddecfe; + font:normal 12px tahoma, arial, helvetica, sans-serif; +} +.x-combo-list-inner { + background-color:#fff; +} +.x-combo-list-hd { + font:bold 11px tahoma, arial, helvetica, sans-serif; + color:#15428b; + background-image: url(../images/default/layout/panel-title-light-bg.gif); + border-bottom-color:#98c0f4; +} +.x-resizable-pinned .x-combo-list-inner { + border-bottom-color:#98c0f4; +} +.x-combo-list-item { + border-color:#fff; +} +.x-combo-list .x-combo-selected{ + border-color:#a3bae9 !important; + background-color:#dfe8f6; +} +.x-combo-list .x-toolbar { + border-top-color:#98c0f4; +} +.x-combo-list-small { + font:normal 11px tahoma, arial, helvetica, sans-serif; +} +.x-panel { + border-color: #99bbe8; +} +.x-panel-header { + color:#15428b; + font-weight:bold; + font-size: 11px; + font-family: tahoma,arial,verdana,sans-serif; + border-color:#99bbe8; + background-image: url(../images/default/panel/white-top-bottom.gif); +} +.x-panel-body { + border-color:#99bbe8; + background-color:#fff; +} +.x-panel-bbar .x-toolbar, .x-panel-tbar .x-toolbar { + border-color:#99bbe8; +} +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-top-color:#99bbe8; +} +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-top-color:#99bbe8; +} +.x-panel-tl .x-panel-header { + color:#15428b; + font-weight:bold; + font-size: 11px; + font-family: tahoma,arial,verdana,sans-serif; +} +.x-panel-tc { + background-image: url(../images/default/panel/top-bottom.gif); +} +.x-panel-tl, .x-panel-tr, .x-panel-bl, .x-panel-br{ + background-image: url(../images/default/panel/corners-sprite.gif); + border-bottom-color:#99bbe8; +} +.x-panel-bc { + background-image: url(../images/default/panel/top-bottom.gif); +} +.x-panel-mc { + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} +.x-panel-ml { + background-color: #fff; + background-image:url(../images/default/panel/left-right.gif); +} +.x-panel-mr { + background-image: url(../images/default/panel/left-right.gif); +} +.x-tool { + background-image:url(../images/default/panel/tool-sprites.gif); +} +.x-panel-ghost { + background-color:#cbddf3; +} +.x-panel-ghost ul { + border-color:#99bbe8; +} +.x-panel-dd-spacer { + border-color:#99bbe8; +} +.x-panel-fbar td,.x-panel-fbar span,.x-panel-fbar input,.x-panel-fbar div,.x-panel-fbar select,.x-panel-fbar label{ + font:normal 11px arial,tahoma, helvetica, sans-serif; +} +.x-window-proxy { + background-color:#c7dffc; + border-color:#99bbe8; +} +.x-window-tl .x-window-header { + color:#15428b; + font:bold 11px tahoma,arial,verdana,sans-serif; +} +.x-window-tc { + background-image: url(../images/default/window/top-bottom.png); +} +.x-window-tl { + background-image: url(../images/default/window/left-corners.png); +} +.x-window-tr { + background-image: url(../images/default/window/right-corners.png); +} +.x-window-bc { + background-image: url(../images/default/window/top-bottom.png); +} +.x-window-bl { + background-image: url(../images/default/window/left-corners.png); +} +.x-window-br { + background-image: url(../images/default/window/right-corners.png); +} +.x-window-mc { + border-color:#99bbe8; + font: normal 11px tahoma,arial,helvetica,sans-serif; + background-color:#dfe8f6; +} +.x-window-ml { + background-image: url(../images/default/window/left-right.png); +} +.x-window-mr { + background-image: url(../images/default/window/left-right.png); +} +.x-window-maximized .x-window-tc { + background-color:#fff; +} +.x-window-bbar .x-toolbar { + border-top-color:#99bbe8; +} +.x-panel-ghost .x-window-tl { + border-bottom-color:#99bbe8; +} +.x-panel-collapsed .x-window-tl { + border-bottom-color:#84a0c4; +} +.x-dlg-mask{ + background-color:#ccc; +} +.x-window-plain .x-window-mc { + background-color: #ccd9e8; + border-color: #a3bae9 #dfe8f6 #dfe8f6 #a3bae9; +} +.ext-ie .x-window-plain .x-window-mc { + background-color: #c9d5e4; +} +.x-window-plain .x-window-body { + border-color: #dfe8f6 #a3bae9 #a3bae9 #dfe8f6; +} +body.x-body-masked .x-window-plain .x-window-mc { + background-color: #ccd9e8; +} +.x-html-editor-wrap { + border-color:#a9bfd3; + background-color:#fff; +} + +.x-html-editor-tb .x-edit-bold, .x-menu-item .x-edit-bold { + background-position:0 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-italic, .x-menu-item .x-edit-italic { + background-position:-16px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-underline, .x-menu-item .x-edit-underline { + background-position:-32px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-forecolor, .x-menu-item .x-edit-forecolor { + background-position:-160px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-backcolor, .x-menu-item .x-edit-backcolor { + background-position:-176px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyleft, .x-menu-item .x-edit-justifyleft { + background-position:-112px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifycenter, .x-menu-item .x-edit-justifycenter { + background-position:-128px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-justifyright, .x-menu-item .x-edit-justifyright { + background-position:-144px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertorderedlist, .x-menu-item .x-edit-insertorderedlist { + background-position:-80px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-insertunorderedlist, .x-menu-item .x-edit-insertunorderedlist { + background-position:-96px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-increasefontsize, .x-menu-item .x-edit-increasefontsize { + background-position:-48px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-decreasefontsize, .x-menu-item .x-edit-decreasefontsize { + background-position:-64px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-sourceedit, .x-menu-item .x-edit-sourceedit { + background-position:-192px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +} + +.x-html-editor-tb .x-edit-createlink, .x-menu-item .x-edit-createlink { + background-position:-208px 0; + background-image:url(../images/default/editor/tb-sprite.gif); +}.x-panel-noborder .x-panel-header-noborder { + border-bottom-color:#99bbe8; +} +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} +.x-tab-panel-bbar-noborder .x-toolbar { + border-top-color:#99bbe8; +} +.x-tab-panel-tbar-noborder .x-toolbar { + border-bottom-color:#99bbe8; +} +.x-border-layout-ct { + background-color:#dfe8f6; +} +.x-accordion-hd { + color:#222; + font-weight:normal; + background-image: url(../images/default/panel/light-hd.gif); +} +.x-layout-collapsed{ + background-color:#d2e0f2; + border-color:#98c0f4; +} +.x-layout-collapsed-over{ + background-color:#d9e8fb; +} +.x-layout-split-west .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} +.x-layout-split-east .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} +.x-layout-split-north .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-layout-split-south .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} +.x-layout-cmini-west .x-layout-mini { + background-image:url(../images/default/layout/mini-right.gif); +} +.x-layout-cmini-east .x-layout-mini { + background-image:url(../images/default/layout/mini-left.gif); +} +.x-layout-cmini-north .x-layout-mini { + background-image:url(../images/default/layout/mini-bottom.gif); +} +.x-layout-cmini-south .x-layout-mini { + background-image:url(../images/default/layout/mini-top.gif); +} +.x-progress-wrap { + border-color:#6593cf; +} +.x-progress-inner { + background-color:#e0e8f3; + background-image:url(../images/default/qtip/bg.gif); +} +.x-progress-bar { + background-color:#9cbfee; + background-image:url(../images/default/progress/progress-bg.gif); + border-top-color:#d1e4fd; + border-bottom-color:#7fa9e4; + border-right-color:#7fa9e4; +} +.x-progress-text { + font-size:11px; + font-weight:bold; + color:#fff; +} +.x-progress-text-back { + color:#396095; +} +.x-slider-horz, .x-slider-horz .x-slider-end, .x-slider-horz .x-slider-inner { + background-image:url(../images/default/slider/slider-bg.png); +} +.x-slider-horz .x-slider-thumb { + background-image:url(../images/default/slider/slider-thumb.png); +} +.x-slider-vert, .x-slider-vert .x-slider-end, .x-slider-vert .x-slider-inner { + background-image:url(../images/default/slider/slider-v-bg.png); +} +.x-slider-vert .x-slider-thumb { + background-image:url(../images/default/slider/slider-v-thumb.png); +} +.x-window-dlg .ext-mb-text, +.x-window-dlg .x-window-header-text { + font-size:12px; +} +.x-window-dlg .ext-mb-textarea { + font:normal 12px tahoma,arial,helvetica,sans-serif; +} +.x-window-dlg .x-msg-box-wait { + background-image:url(../images/default/grid/loading.gif); +} +.x-window-dlg .ext-mb-info { + background-image:url(../images/default/window/icon-info.gif); +} +.x-window-dlg .ext-mb-warning { + background-image:url(../images/default/window/icon-warning.gif); +} +.x-window-dlg .ext-mb-question { + background-image:url(../images/default/window/icon-question.gif); +} +.x-window-dlg .ext-mb-error { + background-image:url(../images/default/window/icon-error.gif); +} diff --git a/src/main/webapp/resources/css/gxt-gray.css b/src/main/webapp/resources/css/gxt-gray.css new file mode 100644 index 0000000..bc31336 --- /dev/null +++ b/src/main/webapp/resources/css/gxt-gray.css @@ -0,0 +1,493 @@ +.x-panel { + border-style: solid; + border-color: #d0d0d0; +} +.x-panel-header { + color:#333; + border:1px solid #d0d0d0; + background-image:url(../images/gray/panel/white-top-bottom.gif); +} + +.x-panel-body { + border-color:#d0d0d0; +} + +.x-panel-bbar .x-toolbar { + border-color:#d0d0d0; +} + +.x-panel-tbar .x-toolbar { + border-color:#d0d0d0; +} + +.x-panel-tbar-noheader .x-toolbar, .x-panel-mc .x-panel-tbar .x-toolbar { + border-color:#d0d0d0; +} +.x-panel-body-noheader, .x-panel-mc .x-panel-body { + border-color:#d0d0d0; +} +.x-panel-tl .x-panel-header { + color:#333; +} +.x-panel-tc { + background-image:url(../images/gray/panel/top-bottom.gif); +} +.x-panel-tl { + background-image:url(../images/gray/panel/corners-sprite.gif); + border-color:#d0d0d0; +} +.x-panel-tr { + background-image:url(../images/gray/panel/corners-sprite.gif); +} +.x-panel-bc { + background-image:url(../images/gray/panel/top-bottom.gif); +} +.x-panel-bl { + background-image:url(../images/gray/panel/corners-sprite.gif); +} +.x-panel-br { + background-image:url(../images/gray/panel/corners-sprite.gif); +} +.x-panel-mc { + background:#f1f1f1; +} +.x-panel-mc .x-panel-body { + background:transparent; + border: 0 none; +} +.x-panel-ml { + background-image:url(../images/gray/panel/left-right.gif); +} +.x-panel-mr { + background-image:url(../images/gray/panel/left-right.gif); +} + +/* Tools */ +.x-tool { + background-image:url(../images/gray/panel/tool-sprites.gif); +} + +/* Ghosting */ +.x-panel-ghost { + background:#e0e0e0; +} + +.x-panel-ghost ul { + border-color:#b0b0b0; +} + +.x-grid-panel .x-panel-mc .x-panel-body { + border:1px solid #d0d0d0; +} + +/* Buttons */ + +.x-btn-left{ + background-image:url(../images/gray/button/btn-sprite.gif); +} +.x-btn-right{ + background-image:url(../images/gray/button/btn-sprite.gif); +} +.x-btn-center{ + background-image:url(../images/gray/button/btn-sprite.gif); +} + +.x-btn-group-header { + color: #333333; +} +.x-btn-group-tc { + background-image: url(../images/gray/button/group-tb.gif); +} +.x-btn-group-tl { + background-image: url(../images/gray/button/group-cs.gif); +} +.x-btn-group-tr { + background-image: url(../images/gray/button/group-cs.gif); +} +.x-btn-group-bc { + background-image: url(../images/gray/button/group-tb.gif); +} +.x-btn-group-bl { + background-image: url(../images/gray/button/group-cs.gif); +} +.x-btn-group-br { + background-image: url(../images/gray/button/group-cs.gif); +} +.x-btn-group-ml { + background-image: url(../images/gray/button/group-lr.gif); +} +.x-btn-group-mr { + background-image: url(../images/gray/button/group-lr.gif); +} +.x-btn-group-notitle .x-btn-group-tc { + background-image: url(../images/gray/button/group-tb.gif); +} + +/* Layout classes */ + +.x-border-layout-ct { + background:#f0f0f0; +} + +.x-accordion-hd { + background-image:url(../images/gray/panel/light-hd.gif); +} + +.x-layout-collapsed{ + background-color:#eee; + border-color:#e0e0e0; +} +.x-layout-collapsed-over{ + background-color:#fbfbfb; +} + + +/* qtips */ +.x-tip .x-tip-top { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-top-left { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-top-right { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft-left { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-ft-right { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-bd-left { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} +.x-tip .x-tip-bd-right { + background-image:url(../images/gray/qtip/tip-sprite.gif); +} + +/* Toolbars */ + +.x-toolbar{ + border-color:#d0d0d0; + background:#f0f4f5 url(../images/gray/toolbar/bg.gif) repeat-x top left; +} +.x-toolbar button { + color:#444; +} +.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button { + background-image:url(../images/gray/toolbar/btn-arrow.gif); +} +.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button { + background-image:url(../images/gray/toolbar/btn-arrow.gif); +} +.x-toolbar .x-btn-over .x-btn-left{ + background-image:url(../images/gray/toolbar/tb-btn-sprite.gif); +} +.x-toolbar .x-btn-over .x-btn-right{ + background-image:url(../images/gray/toolbar/tb-btn-sprite.gif); +} +.x-toolbar .x-btn-over .x-btn-center{ + background-image:url(../images/gray/toolbar/tb-btn-sprite.gif); +} +.x-toolbar .x-btn-over button { + color:#111; +} +.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{ + background-image:url(../images/gray/toolbar/tb-btn-sprite.gif); +} +.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{ + background-image:url(../images/gray/toolbar/tb-btn-sprite.gif); +} + +.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{ + background-image:url(../images/gray/toolbar/tb-btn-sprite.gif); +} +.x-toolbar .xtb-sep { + background-image: url(../images/gray/grid/grid-split.gif); +} + +/* Tabs */ + +.x-tab-panel-header, .x-tab-panel-footer { + background: #EAEAEA; + border-color:#d0d0d0; +} + + +.x-tab-panel-header { + border-color:#d0d0d0; +} + +.x-tab-panel-footer { + border-color:#d0d0d0; +} + +ul.x-tab-strip-top{ + background:#dbdbdb url(../images/gray/tabs/tab-strip-bg.gif) repeat-x left top; + border-color:#d0d0d0; + padding-top: 2px; +} + +ul.x-tab-strip-bottom{ + background-image:url(../images/gray/tabs/tab-strip-btm-bg.gif); + border-color:#d0d0d0; +} + +.x-tab-strip span.x-tab-strip-text { + color:#333; +} +.x-tab-strip-over span.x-tab-strip-text { + color:#111; +} + +.x-tab-strip-active span.x-tab-strip-text { + color:#333; +} + +.x-tab-strip-disabled .x-tabs-text { + color:#aaaaaa; +} + +.x-tab-strip-top .x-tab-right { + background-image:url(../images/gray/tabs/tabs-sprite.gif); +} + +.x-tab-strip-top .x-tab-left { + background-image:url(../images/gray/tabs/tabs-sprite.gif); +} +.x-tab-strip-top .x-tab-strip-inner { + background-image:url(../images/gray/tabs/tabs-sprite.gif); +} + +.x-tab-strip-bottom .x-tab-right { + background-image:url(../images/gray/tabs/tab-btm-inactive-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-left { + background-image:url(../images/gray/tabs/tab-btm-inactive-left-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-right { + background-image:url(../images/gray/tabs/tab-btm-right-bg.gif); +} + +.x-tab-strip-bottom .x-tab-strip-active .x-tab-left { + background-image:url(../images/gray/tabs/tab-btm-left-bg.gif); +} + +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { + background-image:url(../images/gray/tabs/tab-close.gif); +} +.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{ + background-image:url(../images/gray/tabs/tab-close.gif); +} + +.x-tab-panel-body { + border-color:#d0d0d0; + background:#fff; +} +.x-tab-panel-bbar .x-toolbar { + border-color: #d0d0d0; +} + +.x-tab-panel-tbar .x-toolbar { + border-color: #d0d0d0; +} + +.x-tab-panel-header-plain .x-tab-strip-spacer { + border-color:#d0d0d0; + background: #eaeaea; +} + +.x-tab-scroller-left { + background-image: url(../images/gray/tabs/scroll-left.gif); + border-color:#aeaeae; +} +.x-tab-scroller-right { + background-image: url(../images/gray/tabs/scroll-right.gif); + border-color:#aeaeae; +} + +/* Window */ + +.x-window-proxy { + background:#e0e0e0; + border-color:#b0b0b0; +} + +.x-window-tl .x-window-header { + color:#555; +} +.x-window-tc { + background-image:url(../images/gray/window/top-bottom.png); +} +.x-window-tl { + background-image:url(../images/gray/window/left-corners.png); +} +.x-window-tr { + background-image:url(../images/gray/window/right-corners.png); +} +.x-window-bc { + background-image:url(../images/gray/window/top-bottom.png); +} +.x-window-bl { + background-image:url(../images/gray/window/left-corners.png); +} +.x-window-br { + background-image:url(../images/gray/window/right-corners.png); +} +.x-window-mc { + border:1px solid #d0d0d0; + background:#e8e8e8; +} +.ext-ie .x-window-plain .x-window-mc { + background-color: #e3e3e3; +} + +.x-window-ml { + background-image:url(../images/gray/window/left-right.png); +} +.x-window-mr { + background-image:url(../images/gray/window/left-right.png); +} +.x-panel-ghost .x-window-tl { + border-color:#d0d0d0; +} +.x-panel-collapsed .x-window-tl { + border-color:#d0d0d0; +} + +.x-window-plain .x-window-mc { + background: #e8e8e8; + border-right:1px solid #eee; + border-bottom:1px solid #eee; + border-top:1px solid #d0d0d0; + border-left:1px solid #d0d0d0; +} + +.x-window-plain .x-window-body { + border-left:1px solid #eee; + border-top:1px solid #eee; + border-bottom:1px solid #d0d0d0; + border-right:1px solid #d0d0d0; + background:transparent !important; +} + +body.x-body-masked .x-window-mc, body.x-body-masked .x-window-plain .x-window-mc { + background-color: #e4e4e4; +} + + +/* misc */ +.x-html-editor-wrap { + border-color:#d0d0d0; +} + +/* Borders go last for specificity */ +.x-panel-noborder .x-panel-body-noborder { + border-width:0; +} + +.x-panel-noborder .x-panel-header-noborder { + border-width:0; + border-bottom:1px solid #d0d0d0; +} + +.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { + border-width:0; + border-bottom:1px solid #d0d0d0; +} + +.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { + border-width:0; + border-top:1px solid #d0d0d0; +} + +.x-window-noborder .x-window-mc { + border-width:0; +} +.x-window-plain .x-window-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-body-noborder { + border-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-header-noborder { + border-top-width:0; + border-left-width:0; + border-right-width:0; +} + +.x-tab-panel-noborder .x-tab-panel-footer-noborder { + border-bottom-width:0; + border-left-width:0; + border-right-width:0; +} + + +.x-tab-panel-bbar-noborder .x-toolbar { + border-width:0; + border-top:1px solid #d0d0d0; +} + +.x-tab-panel-tbar-noborder .x-toolbar { + border-width:0; + border-bottom:1px solid #d0d0d0; +} + +.x-spinner-field .x-form-spinner-up { + background-image: url('../images/gray/form/spinner.gif'); +} +.x-spinner-field .x-form-spinner-down { + background-image: url('../images/gray/form/spinner.gif'); +}.x-accordion-hd { + background-color: #e5e5e5; +}.x-border { + border: 1px solid #D0D0D0; +} + +.x-layout-popup { + background-color: #F0F0F0; + border: 1px solid #D0D0D0; +} + +.my-list { + border: 1px solid #D0D0D0; +} + +.x-view { + border:1px solid #D0D0D0; +} + +.x-menubar { + border-color: #D0D0D0; + background-color: #F0F0F0; + background-image: url(../images/gray/toolbar/bg.gif); +} + +.x-menubar-item-active { + background-color: #D9E8FB; +} + +.x-menubar-item-active { + background-color: #D9E8FB; +}.x-date-right-icon { + background-image: url(../images/default/shared/right-btn.gif); + margin-right: 2px; + text-decoration: none !important; +} + +.x-date-left-icon { + background-image: url(../images/default/shared/left-btn.gif); + margin-right: 2px; + text-decoration: none !important; +}.my-tbl { + border: 1px solid #C6C5C5; +}.my-treetbl { + border: 1px solid #C6C5C5; +} \ No newline at end of file diff --git a/src/main/webapp/resources/desktop/css/desktop.css b/src/main/webapp/resources/desktop/css/desktop.css new file mode 100644 index 0000000..1db8a3b --- /dev/null +++ b/src/main/webapp/resources/desktop/css/desktop.css @@ -0,0 +1,638 @@ +/* + * Ext JS Library 2.1 + * Copyright(c) 2006-2008, Ext JS, LLC. + * licensing@extjs.com + * + * http://extjs.com/license + */ +html,body { + background: #3d71b8 url(../wallpapers/desktop.jpg) no-repeat left top; + font: normal 12px tahoma, arial, verdana, sans-serif; + margin: 0; + padding: 0; + border: 0 none; + overflow: hidden; + height: 100%; +} + +.start { + background-image: url( ../images/taskbar/black/startbutton-icon.gif ) !important; +} + +.bogus { + background-image: url( ../images/bogus.png ) !important; +} + +.logout { + background-image: url( ../images/logout.gif ) !important; +} + +.settings { + background-image: url( ../images/gears.gif ) !important; +} + +#dpanels { + width: 250px; + float: right; +} + +#dpanels .x-panel { + margin: 15px; +} + +#dpanels .x-date-picker { + border: 0 none; + border-top: 0 none; + background: transparent; +} + +#dpanels .x-date-picker td.x-date-active { + background: #ffffff; +} + +#dpanels .x-date-picker { + width: 100% !important; +} + +#x-desktop { + width: 100%; + height: 100%; + border: 0 none; + position: relative; + overflow: hidden; + zoom: 1; +} + +#ux-taskbar .x-btn { + float: left; + margin: 1px 0 0 1px; + position: relative; +} + +#ux-taskbar-start .x-btn { + float: left; + margin: 0; + position: relative; +} + +#ux-taskbar button { /* width: 150px; + overflow: hidden; */ + text-align: left; + color: #ffffff; +} + +#title-bar-wrapper { + height: 35px; +} + +#title-bar { + color: #225599; + padding: 9px 7px; + font: bold 16px tahoma, arial, verdana, sans-serif; + float: left; +} + +#x-logout { + float: right; + padding: 6px 7px; +} + +.x-btn-text-icon .x-btn-center .logout { + background-position: 0pt 3px; + background-repeat: no-repeat; + padding: 3px 0pt 3px 18px; +} + +#ux-taskbar { + background: transparent none; + height: 30px; + margin: 0; + padding: 0; + position: relative; + z-index: 12001; +} + +.x-btn-icon .ux-taskbutton-center .x-btn-text { + background-position: center; + background-repeat: no-repeat; + height: 16px; + width: 16px; + cursor: pointer; + white-space: nowrap; + padding: 0; +} + +.x-btn-icon .ux-taskbutton-center { + padding: 1px; +} + +.ux-startbutton-center .x-btn-text { + color: #000000 !important; + font-weight: bold; +} + +.ux-taskbutton-left,.ux-taskbutton-right { + font-size: 1px; + line-height: 1px; +} + +.ux-taskbutton-left { + width: 4px; + height: 28px; + background: url( ../images/taskbar/black/taskbutton.gif ) no-repeat 0 0; +} + +.ux-taskbutton-right { + width: 4px; + height: 28px; + background: url( ../images/taskbar/black/taskbutton.gif ) no-repeat 0 -28px; +} + +.ux-taskbutton-left i,.ux-taskbutton-right i { + display: block; + width: 4px; + overflow: hidden; + font-size: 1px; + line-height: 1px; +} + +.ux-taskbutton-center { + background: url( ../images/taskbar/black/taskbutton.gif ) repeat-x 0 -56px; + vertical-align: middle; + text-align: center; + padding: 0 5px; + cursor: pointer; + white-space: nowrap; +} + +#ux-taskbar .ux-taskbutton-left { + background-position: 0 0; +} + +#ux-taskbar .ux-taskbutton-right { + background-position: 0 -28px; +} + +#ux-taskbar .ux-taskbutton-center { + background-position: 0 -56px; +} + +#ux-taskbar .x-btn-over .ux-taskbutton-left { + background-position: 0 -252px; +} + +#ux-taskbar .x-btn-over .ux-taskbutton-right { + background-position: 0 -280px; +} + +#ux-taskbar .x-btn-over .ux-taskbutton-center { + background-position: 0 -308px; +} + +#ux-taskbar .x-btn-click .ux-taskbutton-left { + background-position: 0 -168px; +} + +#ux-taskbar .x-btn-click .ux-taskbutton-right { + background-position: 0 -196px; +} + +#ux-taskbar .x-btn-click .ux-taskbutton-center { + background-position: 0 -224px; +} + +#ux-taskbar .active-win .ux-taskbutton-left { + background-position: 0 -84px; +} + +#ux-taskbar .active-win .ux-taskbutton-right { + background: url( ../images/taskbar/black/taskbutton.gif ) no-repeat 0 -112px; +} + +#ux-taskbar .active-win .ux-taskbutton-center { + background: url( ../images/taskbar/black/taskbutton.gif ) repeat-x 0 -140px; +} + +#ux-taskbar .active-win .ux-taskbutton-center button { + color: #fff; +} + +#spacer { + height: 25px; + float: left; + width: 0; + overflow: hidden; + margin-top: 2px; +} + +.x-window-body p,.x-panel-body p { + padding: 10px; + margin: 0; +} + +.x-window-maximized .x-window-bc { + height: 0; +} + +.add { + background-image: url(../images/add.gif) !important; +} + +.option { + background-image: url(../images/plugin.gif) !important; +} + +.remove { + background-image: url(../images/delete.gif) !important; +} + +.tabs { + background-image: url(../images/tabs.gif) !important; +} + +.ux-start-menu { + background: transparent none; + border: 0px none; + padding: 0; +} + +.ux-start-menu-tl .x-window-header { + color: #f1f1f1; + font: bold 11px tahoma, arial, verdana, sans-serif; + padding: 5px 0 4px 0; +} + +.x-panel-tl .x-panel-icon,.ux-start-menu-tl .x-panel-icon { + background-position: 0pt 4px; + background-repeat: no-repeat; + padding-left: 20px !important; +} + +.ux-start-menu-tl { + background: transparent url( ../images/taskbar/black/start-menu-left-corners.png ) no-repeat 0 0; + padding-left: 6px; + zoom: 1; + z-index: 1; + position: relative; +} + +.ux-start-menu-tr { + background: transparent url( ../images/taskbar/black/start-menu-right-corners.png ) no-repeat right + 0; + padding-right: 6px; +} + +.ux-start-menu-tc { + background: transparent url( ../images/taskbar/black/start-menu-top-bottom.png ) repeat-x 0 0; + overflow: hidden; + zoom: 1; +} + +.ux-start-menu-ml { + background: transparent url( ../images/taskbar/black/start-menu-left-right.png ) repeat-y 0 0; + padding-left: 6px; + zoom: 1; +} + +.ux-start-menu-bc { + background: transparent url( ../images/taskbar/black/start-menu-top-bottom.png ) repeat-x 0 bottom; + zoom: 1; +} + +.ux-start-menu-bc .x-window-footer { + padding-bottom: 6px; + zoom: 1; + font-size: 0; + line-height: 0; +} + +.ux-start-menu-bl { + background: transparent url( ../images/taskbar/black/start-menu-left-corners.png ) no-repeat 0 + bottom; + padding-left: 6px; + zoom: 1; +} + +.ux-start-menu-br { + background: transparent url( ../images/taskbar/black/start-menu-right-corners.png ) no-repeat right + bottom; + padding-right: 6px; + zoom: 1; +} + +.x-panel-nofooter .ux-start-menu-bc { + height: 6px; +} + +.ux-start-menu-splitbar-h { + background-color: #d0d0d0; +} + +.ux-start-menu-bwrap { + background: transparent none; + border: 0px none; +} + +.ux-start-menu-body { + background: transparent none; + border: 0px none; +} + +.ux-start-menu-apps-panel { + background: #ffffff none; + border: 1px solid #1e2124; +} + +.ux-start-menu-tools-panel { + border: 0px none; + background: transparent url( ../images/taskbar/black/start-menu-right.png ) repeat-y scroll right + 0pt; +} + +#ux-taskbar-start { + background: #000000 url( ../images/taskbar/black/taskbar-start-panel-bg.gif ) repeat-x left top; + left: 0px; + padding: 0; + position: absolute; +} + +#ux-taskbar-start .x-toolbar { + background: none; + padding: 0px; + border: 0px none; +} + +#ux-taskbuttons-panel { + background: #000000 url( ../images/taskbar/black/taskbuttons-panel-bg.gif ) repeat-x left top; + padding-top: 0; + position: relative; +} + +.ux-taskbuttons-strip-wrap { /* overflow:hidden; + position:relative; + width:100%; */ + width: 100%; + overflow: hidden; + position: relative; + zoom: 1; +} + +ul.ux-taskbuttons-strip { + display: block; + width: 5000px; + zoom: 1; +} + +ul.ux-taskbuttons-strip li { + float: left; + margin-left: 2px; +} + +ul.ux-taskbuttons-strip li.ux-taskbuttons-edge { + float: left; + margin: 0 !important; + padding: 0 !important; + border: 0 none !important; + font-size: 1px !important; + line-height: 1px !important; + overflow: hidden; + zoom: 1; + background: transparent !important; + width: 1px; +} + +.x-clear { + clear: both; + height: 0; + overflow: hidden; + line-height: 0; + font-size: 0; +} + +.x-taskbuttons-scrolling { + position: relative; +} + +.x-taskbuttons-scrolling .ux-taskbuttons-strip-wrap { + margin-left: 18px; + margin-right: 18px; +} + +td.ux-taskButtons-edge { /*float:left;*/ + margin: 0 !important; + padding: 0 !important; + border: 0 none !important; + font-size: 1px !important; + line-height: 1px !important; + overflow: hidden; + zoom: 1; + background: transparent !important; + width: 1px; +} + +.ux-taskbuttons-scroller-left { + background: transparent url( ../images/taskbar/black/scroll-left.gif ) no-repeat -18px 0; + width: 18px; + position: absolute; + left: 1px; + top: 0px; + z-index: 10; + cursor: pointer; +} + +.ux-taskbuttons-scroller-left-over { + background-position: 0 0; +} + +.ux-taskbuttons-scroller-left-disabled { + background-position: -18px 0; + opacity: .5; + -moz-opacity: .5; + filter: alpha(opacity = 50); + cursor: default; +} + +.ux-taskbuttons-scroller-right { + background: transparent url( ../images/taskbar/black/scroll-right.gif ) no-repeat 0 0; + width: 18px; + position: absolute; + right: 0; + top: 0px; + z-index: 10; + cursor: pointer; +} + +.ux-taskbuttons-scroller-right-over { + background-position: -18px 0; +} + +.ux-taskbuttons-scroller-right-disabled { + background-position: 0 0; + opacity: .5; + -moz-opacity: .5; + filter: alpha(opacity = 50); + cursor: default; +} + +.ux-toolmenu-sep { + background-color: #18191a; + border-bottom: 1px solid #858789; + display: block; + font-size: 1px; + line-height: 1px; + margin: 2px 3px; +} + +.ux-start-menu-tools-panel ul.x-menu-list li.x-menu-list-item a.x-menu-item { + color: #ffffff; +} + +.ux-start-menu-tools-panel ul.x-menu-list li.x-menu-list-item .x-menu-item-active a.x-menu-item { + color: #000000; +} + +.ux-start-menu-tools-panel .x-menu-item-active { + background: #525456 url( ../images/taskbar/black/item-over.gif ) repeat-x left bottom; + border: 1px solid #000000; + padding: 0; +} + +#ux-taskbar .x-splitbar-h { + background: #000000 url( ../images/taskbar/black/taskbar-split-h.gif ) no-repeat 0 0; + width: 8px; +} + +.x-window-header-text { + cursor: default; +} + +/* + * Begin Start button + */ +.ux-startbutton-left,.ux-startbutton-right { + font-size: 1px; + line-height: 1px; +} + +.ux-startbutton-left { + width: 10px; + height: 28px; + background: url( ../images/taskbar/black/startbutton.gif ) no-repeat 0 0; +} + +.ux-startbutton-right { + width: 10px; + height: 30px; + background: url( ../images/taskbar/black/startbutton.gif ) no-repeat 0 -28px; +} + +.ux-startbutton-left i,.ux-startbutton-right i { + display: block; + width: 10px; + overflow: hidden; + font-size: 1px; + line-height: 1px; +} + +.ux-startbutton-center { + background: url( ../images/taskbar/black/startbutton.gif ) repeat-x 0 -56px; + vertical-align: middle; + text-align: center; + padding: 0; + cursor: pointer; + white-space: nowrap; +} + +#ux-taskbar .ux-startbutton-left { + background-position: 0 0; +} + +#ux-taskbar .ux-startbutton-right { + background-position: 0 -30px; +} + +#ux-taskbar .ux-startbutton-center { + background-position: 0 -60px; +} + +#ux-taskbar .x-btn-over .ux-startbutton-left { + background-position: 0 -270px; +} + +#ux-taskbar .x-btn-over .ux-startbutton-right { + background-position: 0 -300px; +} + +#ux-taskbar .x-btn-over .ux-startbutton-center { + background-position: 0 -330px; +} + +#ux-taskbar .x-btn-click .ux-startbutton-left { + background-position: 0 -180px; +} + +#ux-taskbar .x-btn-click .ux-startbutton-right { + background-position: 0 -210px; +} + +#ux-taskbar .x-btn-click .ux-startbutton-center { + background-position: 0 -240px; +} + +#ux-taskbar .active-win .ux-startbutton-left { + background-position: 0 -90px; +} + +#ux-taskbar .active-win .ux-startbutton-right { + background: url( ../images/taskbar/black/startbutton.gif ) no-repeat 0 -120px; +} + +#ux-taskbar .active-win .ux-startbutton-center { + background: url( ../images/taskbar/black/startbutton.gif ) repeat-x 0 -150px; +} + +#ux-taskbar .active-win .ux-startbutton-center button { + color: #fff; +} + +/* + * End Start button + */ +.x-resizable-proxy { + background: #C7DFFC; + opacity: .5; + -moz-opacity: .5; + filter: alpha(opacity = 50); + border: 1px solid #3b5a82; +} + +/* Desktop Shortcuts */ +#x-shortcuts dt { + float: left; + margin: 15px 0 0 15px; + clear: left; + width: 64px; + font: normal 10px tahoma, arial, verdana, sans-serif; + text-align: center; + zoom: 1; + display: block; +} + +#x-shortcuts dt a { + width: 64px; + display: block; + color: white; + text-decoration: none; +} + +#x-shortcuts dt div { + width: 100%; + color: white; + overflow: hidden; + text-overflow: ellipsis; + cursor: pointer; +} + +#x-shortcuts dt a:hover { + text-decoration: underline; +} diff --git a/src/main/webapp/resources/desktop/images/add.gif b/src/main/webapp/resources/desktop/images/add.gif new file mode 100644 index 0000000..9319525 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/add.gif differ diff --git a/src/main/webapp/resources/desktop/images/delete.gif b/src/main/webapp/resources/desktop/images/delete.gif new file mode 100644 index 0000000..5e2a3b1 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/delete.gif differ diff --git a/src/main/webapp/resources/desktop/images/desktop.gif b/src/main/webapp/resources/desktop/images/desktop.gif new file mode 100644 index 0000000..f305cb6 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/desktop.gif differ diff --git a/src/main/webapp/resources/desktop/images/desktop3.jpg b/src/main/webapp/resources/desktop/images/desktop3.jpg new file mode 100644 index 0000000..daca8bc Binary files /dev/null and b/src/main/webapp/resources/desktop/images/desktop3.jpg differ diff --git a/src/main/webapp/resources/desktop/images/gears.gif b/src/main/webapp/resources/desktop/images/gears.gif new file mode 100644 index 0000000..2bf6bd7 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/gears.gif differ diff --git a/src/main/webapp/resources/desktop/images/gears.png b/src/main/webapp/resources/desktop/images/gears.png new file mode 100644 index 0000000..6acdc98 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/gears.png differ diff --git a/src/main/webapp/resources/desktop/images/grid.png b/src/main/webapp/resources/desktop/images/grid.png new file mode 100644 index 0000000..c4da495 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/grid.png differ diff --git a/src/main/webapp/resources/desktop/images/hatch.gif b/src/main/webapp/resources/desktop/images/hatch.gif new file mode 100644 index 0000000..6a044a8 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/hatch.gif differ diff --git a/src/main/webapp/resources/desktop/images/hd-bg.gif b/src/main/webapp/resources/desktop/images/hd-bg.gif new file mode 100644 index 0000000..f35a53f Binary files /dev/null and b/src/main/webapp/resources/desktop/images/hd-bg.gif differ diff --git a/src/main/webapp/resources/desktop/images/hd-tb-bg.gif b/src/main/webapp/resources/desktop/images/hd-tb-bg.gif new file mode 100644 index 0000000..f800edb Binary files /dev/null and b/src/main/webapp/resources/desktop/images/hd-tb-bg.gif differ diff --git a/src/main/webapp/resources/desktop/images/icon_padlock.png b/src/main/webapp/resources/desktop/images/icon_padlock.png new file mode 100644 index 0000000..92625ff Binary files /dev/null and b/src/main/webapp/resources/desktop/images/icon_padlock.png differ diff --git a/src/main/webapp/resources/desktop/images/icons-bg.png b/src/main/webapp/resources/desktop/images/icons-bg.png new file mode 100644 index 0000000..6557cbb Binary files /dev/null and b/src/main/webapp/resources/desktop/images/icons-bg.png differ diff --git a/src/main/webapp/resources/desktop/images/launcher-bg.gif b/src/main/webapp/resources/desktop/images/launcher-bg.gif new file mode 100644 index 0000000..c7cfd83 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/launcher-bg.gif differ diff --git a/src/main/webapp/resources/desktop/images/launcher-btn.gif b/src/main/webapp/resources/desktop/images/launcher-btn.gif new file mode 100644 index 0000000..a9a72d7 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/launcher-btn.gif differ diff --git a/src/main/webapp/resources/desktop/images/logout.gif b/src/main/webapp/resources/desktop/images/logout.gif new file mode 100644 index 0000000..a4f3738 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/logout.gif differ diff --git a/src/main/webapp/resources/desktop/images/logout.png b/src/main/webapp/resources/desktop/images/logout.png new file mode 100644 index 0000000..1fcb386 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/logout.png differ diff --git a/src/main/webapp/resources/desktop/images/member.gif b/src/main/webapp/resources/desktop/images/member.gif new file mode 100644 index 0000000..216c839 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/member.gif differ diff --git a/src/main/webapp/resources/desktop/images/member.png b/src/main/webapp/resources/desktop/images/member.png new file mode 100644 index 0000000..0f3657f Binary files /dev/null and b/src/main/webapp/resources/desktop/images/member.png differ diff --git a/src/main/webapp/resources/desktop/images/plugin.gif b/src/main/webapp/resources/desktop/images/plugin.gif new file mode 100644 index 0000000..209c121 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/plugin.gif differ diff --git a/src/main/webapp/resources/desktop/images/powered.gif b/src/main/webapp/resources/desktop/images/powered.gif new file mode 100644 index 0000000..8ce74b8 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/powered.gif differ diff --git a/src/main/webapp/resources/desktop/images/powered.png b/src/main/webapp/resources/desktop/images/powered.png new file mode 100644 index 0000000..5b2a0b8 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/powered.png differ diff --git a/src/main/webapp/resources/desktop/images/s.gif b/src/main/webapp/resources/desktop/images/s.gif new file mode 100644 index 0000000..1d11fa9 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/s.gif differ diff --git a/src/main/webapp/resources/desktop/images/tabs.gif b/src/main/webapp/resources/desktop/images/tabs.gif new file mode 100644 index 0000000..759de0f Binary files /dev/null and b/src/main/webapp/resources/desktop/images/tabs.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/item-over.gif b/src/main/webapp/resources/desktop/images/taskbar/black/item-over.gif new file mode 100644 index 0000000..26c1fc2 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/item-over.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/scroll-left.gif b/src/main/webapp/resources/desktop/images/taskbar/black/scroll-left.gif new file mode 100644 index 0000000..94fea48 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/scroll-left.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/scroll-right.gif b/src/main/webapp/resources/desktop/images/taskbar/black/scroll-right.gif new file mode 100644 index 0000000..94b5669 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/scroll-right.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-left-corners.png b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-left-corners.png new file mode 100644 index 0000000..d6e5196 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-left-corners.png differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-left-right.png b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-left-right.png new file mode 100644 index 0000000..a577d1b Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-left-right.png differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-right-corners.png b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-right-corners.png new file mode 100644 index 0000000..b683301 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-right-corners.png differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-right.png b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-right.png new file mode 100644 index 0000000..e5fa2b8 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-right.png differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-top-bottom.png b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-top-bottom.png new file mode 100644 index 0000000..fbea3cb Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/start-menu-top-bottom.png differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/startbutton-icon.gif b/src/main/webapp/resources/desktop/images/taskbar/black/startbutton-icon.gif new file mode 100644 index 0000000..8dcd2d1 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/startbutton-icon.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/startbutton.gif b/src/main/webapp/resources/desktop/images/taskbar/black/startbutton.gif new file mode 100644 index 0000000..683313e Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/startbutton.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/taskbar-split-h.gif b/src/main/webapp/resources/desktop/images/taskbar/black/taskbar-split-h.gif new file mode 100644 index 0000000..13564ad Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/taskbar-split-h.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/taskbar-start-panel-bg.gif b/src/main/webapp/resources/desktop/images/taskbar/black/taskbar-start-panel-bg.gif new file mode 100644 index 0000000..9794880 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/taskbar-start-panel-bg.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/taskbutton.gif b/src/main/webapp/resources/desktop/images/taskbar/black/taskbutton.gif new file mode 100644 index 0000000..df13974 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/taskbutton.gif differ diff --git a/src/main/webapp/resources/desktop/images/taskbar/black/taskbuttons-panel-bg.gif b/src/main/webapp/resources/desktop/images/taskbar/black/taskbuttons-panel-bg.gif new file mode 100644 index 0000000..0865c45 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/taskbar/black/taskbuttons-panel-bg.gif differ diff --git a/src/main/webapp/resources/desktop/images/winbar-bg.gif b/src/main/webapp/resources/desktop/images/winbar-bg.gif new file mode 100644 index 0000000..45295a6 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/winbar-bg.gif differ diff --git a/src/main/webapp/resources/desktop/images/winbar-btn.gif b/src/main/webapp/resources/desktop/images/winbar-btn.gif new file mode 100644 index 0000000..2c8c024 Binary files /dev/null and b/src/main/webapp/resources/desktop/images/winbar-btn.gif differ diff --git a/src/main/webapp/resources/desktop/images/windows-bg.gif b/src/main/webapp/resources/desktop/images/windows-bg.gif new file mode 100644 index 0000000..396471e Binary files /dev/null and b/src/main/webapp/resources/desktop/images/windows-bg.gif differ diff --git a/src/main/webapp/resources/desktop/wallpapers/desktop.jpg b/src/main/webapp/resources/desktop/wallpapers/desktop.jpg new file mode 100644 index 0000000..8e1fcb0 Binary files /dev/null and b/src/main/webapp/resources/desktop/wallpapers/desktop.jpg differ diff --git a/src/main/webapp/resources/flash/swfobject.js b/src/main/webapp/resources/flash/swfobject.js new file mode 100644 index 0000000..4b704c5 --- /dev/null +++ b/src/main/webapp/resources/flash/swfobject.js @@ -0,0 +1,5 @@ +/* SWFObject v2.1 + Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis + This software is released under the MIT License +*/ +var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("