kune-commits
Threads by month
- ----- 2026 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
September 2008
- 2 participants
- 54 discussions
Author: vjrj
Date: 2008-09-27 05:22:43 +0200 (Sat, 27 Sep 2008)
New Revision: 887
Added:
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java
Modified:
trunk/pom.xml
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorItem.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
Log:
Complete - task 67: Root can be edited / make notVisible / add Folder Actions to menu of contents
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/pom.xml 2008-09-27 03:22:43 UTC (rev 887)
@@ -252,11 +252,6 @@
<version>2.4</version>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>jmimemagic</groupId>
- <artifactId>jmimemagic</artifactId>
- <version>0.1.2</version>
- </dependency>
<!-- testing dependencies -->
<dependency>
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -5,10 +5,10 @@
import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_FOLDER;
import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_GALLERY;
import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_ROOT;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_UPLOADEDFILE;
import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_WIKI;
import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
@@ -174,16 +174,16 @@
}
});
- final ActionButtonDescriptor<StateToken> refresh = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
+ final ActionMenuDescriptor<StateToken> refresh = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Viewer,
ActionPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
stateManager.reload();
contextNavigator.selectItem(stateToken);
}
});
+ refresh.setParentMenuTitle(i18n.t("Folder"));
+ refresh.setTextDescription(i18n.t("Refresh"));
refresh.setIconUrl("images/nav/refresh.png");
- refresh.setToolTip(i18n.t("Refresh"));
- refresh.setLeftSeparator(ActionButtonSeparator.fill);
final ActionDescriptor<StateToken> uploadFile = createUploadAction(i18n.t("Upload file"),
"images/nav/upload.png", i18n.t("Upload some files (images, PDFs, ...)"), null);
@@ -201,20 +201,27 @@
contextActionRegistry.addAction(TYPE_FOLDER, addDoc);
contextActionRegistry.addAction(TYPE_FOLDER, addFolder);
contextActionRegistry.addAction(TYPE_FOLDER, delContainer);
+ contextActionRegistry.addAction(TYPE_FOLDER, refresh);
contextActionRegistry.addAction(TYPE_FOLDER, rename);
contextActionRegistry.addAction(TYPE_FOLDER, goGroupHome);
- contextActionRegistry.addAction(TYPE_FOLDER, refresh);
contextActionRegistry.addAction(TYPE_FOLDER, uploadFile);
contextActionRegistry.addAction(TYPE_BLOG, go);
contextActionRegistry.addAction(TYPE_BLOG, uploadFile);
+ contextActionRegistry.addAction(TYPE_BLOG, refresh);
contextActionRegistry.addAction(TYPE_BLOG, setAsDefGroupContent);
- contextActionRegistry.addAction(TYPE_BLOG, refresh);
contextActionRegistry.addAction(TYPE_GALLERY, go);
contextActionRegistry.addAction(TYPE_GALLERY, goGroupHome);
contextActionRegistry.addAction(TYPE_GALLERY, refresh);
+ contextActionRegistry.addAction(TYPE_UPLOADEDFILE, go);
+ contextActionRegistry.addAction(TYPE_UPLOADEDFILE, delContent);
+ contextActionRegistry.addAction(TYPE_UPLOADEDFILE, rename);
+ // contextActionRegistry.addAction(TYPE_UPLOADEDFILE, goGroupHome);
+ // contextActionRegistry.addAction(TYPE_UPLOADEDFILE, refresh);
+ contextActionRegistry.addAction(TYPE_UPLOADEDFILE, setAsDefGroupContent);
+
contextActionRegistry.addAction(TYPE_WIKI, go);
contextActionRegistry.addAction(TYPE_WIKI, goGroupHome);
contextActionRegistry.addAction(TYPE_WIKI, refresh);
@@ -223,15 +230,15 @@
contextActionRegistry.addAction(TYPE_ROOT, addFolder);
contextActionRegistry.addAction(TYPE_ROOT, addGallery);
contextActionRegistry.addAction(TYPE_ROOT, addWiki);
+ contextActionRegistry.addAction(TYPE_ROOT, refresh);
contextActionRegistry.addAction(TYPE_ROOT, goGroupHome);
- contextActionRegistry.addAction(TYPE_ROOT, refresh);
contextActionRegistry.addAction(TYPE_ROOT, uploadFile);
contextActionRegistry.addAction(TYPE_DOCUMENT, go);
contextActionRegistry.addAction(TYPE_DOCUMENT, delContent);
contextActionRegistry.addAction(TYPE_DOCUMENT, rename);
- contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome);
- contextActionRegistry.addAction(TYPE_DOCUMENT, refresh);
+ // contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome);
+ // contextActionRegistry.addAction(TYPE_DOCUMENT, refresh);
contextActionRegistry.addAction(TYPE_DOCUMENT, setAsDefGroupContent);
}
@@ -259,16 +266,16 @@
return addFolder;
}
- private ActionDescriptor<StateToken> createUploadAction(final String textDescription, final String iconUrl,
+ private ActionButtonDescriptor<StateToken> createUploadAction(final String textDescription, final String iconUrl,
final String toolTip, final String permitedExtensions) {
final ActionButtonDescriptor<StateToken> uploadFile;
uploadFile = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.bootombarAndItemMenu,
new Listener<StateToken>() {
public void onEvent(final StateToken token) {
if (permitedExtensions != null) {
- fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
+ // fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
} else {
- fileUploaderProvider.get().resetPermittedExtensions();
+ // fileUploaderProvider.get().resetPermittedExtensions();
}
fileUploaderProvider.get().show();
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -120,9 +120,8 @@
register(ToolGroup.class, new Factory<DocumentContent>(DocumentContent.class) {
public DocumentContent create() {
final ActionToolbarPanel contentNavigatorToolbar = new ActionToolbarPanel(
- ActionToolbarPanel.Position.content, $(Session.class), $$(ActionManager.class),
- $(WorkspaceSkeleton.class));
- final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contentNavigatorToolbar,
+ ActionToolbarPanel.Position.content, $$(ActionManager.class), $(WorkspaceSkeleton.class));
+ final ActionToolbar toolbar = new ActionToolbarPresenter(contentNavigatorToolbar,
$(ContentActionRegistry.class));
final DocumentContentPresenter presenter = new DocumentContentPresenter($(StateManager.class),
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -23,7 +23,7 @@
import org.ourproject.kune.docs.client.DocumentClientTool;
import org.ourproject.kune.docs.client.cnt.folder.viewer.FolderViewer;
import org.ourproject.kune.docs.client.cnt.reader.DocumentReader;
-import org.ourproject.kune.platf.client.actions.ActionCollectionSet;
+import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.actions.ActionRegistry;
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
import org.ourproject.kune.platf.client.dto.StateDTO;
@@ -188,15 +188,17 @@
private void setState(final StateDTO state) {
content = state;
- ActionCollectionSet<StateToken> set;
final String typeId = content.getTypeId();
+ ActionItemCollection<StateToken> collection;
if (content.hasDocument()) {
- set = actionRegistry.selectCurrentActions(content.getContentRights(), typeId);
+ collection = actionRegistry.getCurrentActions(content.getStateToken(), typeId, content.getContentRights(),
+ true);
} else {
- set = actionRegistry.selectCurrentActions(content.getContainerRights(), typeId);
+ collection = actionRegistry.getCurrentActions(content.getStateToken(), typeId,
+ content.getContainerRights(), true);
}
toolbar.disableMenusAndClearButtons();
- toolbar.showActions(set.getToolbarActions(), true);
+ toolbar.showActions(collection, true);
showContent();
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItem.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -0,0 +1,26 @@
+package org.ourproject.kune.platf.client.actions;
+
+/**
+ * And action description and a item (for instance a StateToken, a XmmpURI) over
+ * the action takes place
+ *
+ * @param <T>
+ */
+public class ActionItem<T> {
+
+ ActionDescriptor<T> action;
+ T item;
+
+ public ActionItem(final ActionDescriptor<T> action, final T item) {
+ this.action = action;
+ this.item = item;
+ }
+
+ public ActionDescriptor<T> getAction() {
+ return action;
+ }
+
+ public T getItem() {
+ return item;
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionItemCollection.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -0,0 +1,9 @@
+package org.ourproject.kune.platf.client.actions;
+
+import java.util.ArrayList;
+
+public class ActionItemCollection<T> extends ArrayList<ActionItem<T>> {
+
+ private static final long serialVersionUID = 1L;
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -12,20 +12,26 @@
this.ws = ws;
}
- public void doAction(final ActionDescriptor<?> action, final Object parameter) {
+ public void doAction(final ActionItem<?> actionItem) {
+ final ActionDescriptor<?> action = actionItem.getAction();
+ final Object item = actionItem.getItem();
if (action.isMustBeConfirmed()) {
ws.askConfirmation(action.getConfirmationTitle(), action.getConfirmationText(), new Listener0() {
public void onEvent() {
- action.fireOnPerformCall(parameter);
+ fire(action, item);
}
}, new Listener0() {
public void onEvent() {
- action.fireOnNotConfirmed(parameter);
+ action.fireOnNotConfirmed(item);
}
});
} else {
- action.fireOnPerformCall(parameter);
+ fire(action, item);
}
}
+ private void fire(final ActionDescriptor<?> action, final Object parameter) {
+ action.fireOnPerformCall(parameter);
+ }
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionRegistry.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -22,47 +22,39 @@
return enableCondition != null ? enableCondition.mustBeEnabled(T) : true;
}
- public void removeAction(final String contentTypeId, final ActionDescriptor<T> action) {
- actions.get(contentTypeId).remove(action);
- }
+ public ActionItemCollection<T> getCurrentActions(final T item, final String contentTypeId,
+ final AccessRightsDTO rights, final boolean toolbarItems) {
+ final ActionItemCollection<T> collection = new ActionItemCollection<T>();
- public ActionCollectionSet<T> selectCurrentActions(final AccessRightsDTO rights, final String contentTypeId) {
- final ActionCollectionSet<T> set = new ActionCollectionSet<T>();
- boolean add = false;
-
for (final ActionDescriptor<T> action : getActions(contentTypeId)) {
- switch (action.getAccessRol()) {
- case Administrator:
- add = rights.isAdministrable();
- break;
- case Editor:
- add = rights.isEditable();
- break;
- case Viewer:
- add = rights.isVisible();
- break;
- }
- if (add) {
- switch (action.getActionPosition()) {
- case topbarAndItemMenu:
- set.getItemActions().add(action);
- case topbar:
- set.getToolbarActions().add(action);
- break;
- case bootombarAndItemMenu:
- set.getItemActions().add(action);
- case bottombar:
- set.getToolbarActions().add(action);
- break;
- case itemMenu:
- set.getItemActions().add(action);
- break;
+ if (mustAdd(rights, action)) {
+ if (toolbarItems) {
+ switch (action.getActionPosition()) {
+ case topbarAndItemMenu:
+ case topbar:
+ case bootombarAndItemMenu:
+ case bottombar:
+ collection.add(new ActionItem<T>(action, item));
+ break;
+ }
+ } else {
+ switch (action.getActionPosition()) {
+ case itemMenu:
+ case topbarAndItemMenu:
+ case bootombarAndItemMenu:
+ collection.add(new ActionItem<T>(action, item));
+ break;
+ }
}
}
}
- return set;
+ return collection;
}
+ public void removeAction(final String contentTypeId, final ActionDescriptor<T> action) {
+ actions.get(contentTypeId).remove(action);
+ }
+
private ActionCollection<T> getActions(final String contentTypeId) {
ActionCollection<T> actionColl = actions.get(contentTypeId);
if (actionColl == null) {
@@ -71,4 +63,16 @@
}
return actionColl;
}
+
+ private boolean mustAdd(final AccessRightsDTO rights, final ActionDescriptor<T> action) {
+ switch (action.getAccessRol()) {
+ case Administrator:
+ return rights.isAdministrable();
+ case Editor:
+ return rights.isEditable();
+ case Viewer:
+ default:
+ return rights.isVisible();
+ }
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -1,6 +1,6 @@
package org.ourproject.kune.platf.client.actions.toolbar;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ActionToolbar {
@@ -9,6 +9,6 @@
void disableMenusAndClearButtons();
- void showActions(ActionCollection<StateToken> actionCollection, boolean isItemSelected);
+ void showActions(ActionItemCollection<StateToken> actionItemCollection, boolean isItemSelected);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -5,11 +5,11 @@
import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
+import org.ourproject.kune.platf.client.actions.ActionItem;
import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.skel.Toolbar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
@@ -35,14 +35,12 @@
private final ArrayList<Widget> removableToolbarItems;
private final HashMap<String, Item> menuItems;
private final WorkspaceSkeleton ws;
- private final Session session;
private final Provider<ActionManager> actionManagerProvider;
private final Position position;
- public ActionToolbarPanel(final Position position, final Session session,
- final Provider<ActionManager> actionManagerProvider, final WorkspaceSkeleton ws) {
+ public ActionToolbarPanel(final Position position, final Provider<ActionManager> actionManagerProvider,
+ final WorkspaceSkeleton ws) {
this.position = position;
- this.session = session;
this.actionManagerProvider = actionManagerProvider;
this.ws = ws;
toolbarMenus = new HashMap<String, Menu>();
@@ -51,7 +49,8 @@
}
- public void addButtonAction(final ActionButtonDescriptor<StateToken> action) {
+ public void addButtonAction(final ActionItem<StateToken> actionItem) {
+ final ActionButtonDescriptor<StateToken> action = (ActionButtonDescriptor<StateToken>) actionItem.getAction();
final ActionPosition pos = action.getActionPosition();
final ToolbarButton button = new ToolbarButton();
final String text = action.getText();
@@ -62,7 +61,7 @@
button.addListener(new ButtonListenerAdapter() {
@Override
public void onClick(final Button button, final EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentStateToken());
+ actionManagerProvider.get().doAction(actionItem);
}
});
if (iconUrl != null) {
@@ -81,14 +80,15 @@
removableToolbarItems.add(button);
}
- public void addMenuAction(final ActionMenuDescriptor<StateToken> action, final boolean enable) {
+ public void addMenuAction(final ActionItem<StateToken> actionItem, final boolean enable) {
+ final ActionMenuDescriptor<StateToken> action = (ActionMenuDescriptor<StateToken>) actionItem.getAction();
final String menuTitle = action.getParentMenuTitle();
final String menuSubTitle = action.getParentSubMenuTitle();
final ActionPosition pos = action.getActionPosition();
final String itemKey = genMenuKey(pos, menuTitle, menuSubTitle, action.getText());
Item item = menuItems.get(itemKey);
if (item == null) {
- item = createToolbarMenu(pos, menuTitle, menuSubTitle, action);
+ item = createToolbarMenu(pos, menuTitle, menuSubTitle, actionItem);
menuItems.put(itemKey, item);
}
if (enable) {
@@ -139,11 +139,12 @@
}
private Item createToolbarMenu(final ActionPosition toolBarPos, final String menuTitle, final String menuSubTitle,
- final ActionMenuDescriptor<StateToken> action) {
+ final ActionItem<StateToken> actionItem) {
+ final ActionMenuDescriptor<StateToken> action = (ActionMenuDescriptor<StateToken>) actionItem.getAction();
final Item item = new Item(action.getText(), new BaseItemListenerAdapter() {
@Override
public void onClick(BaseItem item, EventObject e) {
- actionManagerProvider.get().doAction(action, session.getCurrentStateToken());
+ actionManagerProvider.get().doAction(actionItem);
}
});
item.setIcon(action.getIconUrl());
@@ -199,7 +200,8 @@
private String genMenuKey(final ActionPosition pos, final String menuTitle, final String menuSubTitle,
final String actionText) {
- final String basePart = "km-" + pos.toString() + "-" + menuTitle;
+
+ final String basePart = "km-ctx-" + pos.toString().substring(0, 2) + "-" + menuTitle;
final String subMenuPart = menuSubTitle != null ? "-subm-" + menuSubTitle : "";
final String itemPart = actionText != null ? "-item-" + actionText : "";
return basePart + subMenuPart + itemPart;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -1,23 +1,20 @@
package org.ourproject.kune.platf.client.actions.toolbar;
import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionItem;
+import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
import org.ourproject.kune.platf.client.actions.ActionRegistry;
import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.state.Session;
import com.allen_sauer.gwt.log.client.Log;
public class ActionToolbarPresenter implements ActionToolbar {
private final ActionToolbarView toolbar;
- private final Session session;
private final ActionRegistry<StateToken> actionRegistry;
- public ActionToolbarPresenter(final Session session, final ActionToolbarView toolbar,
- final ActionRegistry<StateToken> actionRegistry) {
- this.session = session;
+ public ActionToolbarPresenter(final ActionToolbarView toolbar, final ActionRegistry<StateToken> actionRegistry) {
this.toolbar = toolbar;
this.actionRegistry = actionRegistry;
}
@@ -27,23 +24,26 @@
}
public void disableMenusAndClearButtons() {
- toolbar.clearRemovableActions();
- toolbar.disableAllMenuItems();
+ toolbar.clear();
+ // With action-item, this must be redesigned
+ // toolbar.clearRemovableActions();
+ // toolbar.disableAllMenuItems();
}
- public void showActions(final ActionCollection<StateToken> actions, final boolean isItemSelected) {
- for (final ActionDescriptor<StateToken> action : actions) {
+ public void showActions(final ActionItemCollection<StateToken> actions, final boolean isItemSelected) {
+ for (final ActionItem<StateToken> actionItem : actions) {
+ final ActionDescriptor<StateToken> action = actionItem.getAction();
if (action instanceof ActionMenuDescriptor) {
- toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, isItemSelected
- && actionRegistry.checkEnabling(action, session.getCurrentStateToken()));
+ toolbar.addMenuAction(actionItem, isItemSelected
+ && actionRegistry.checkEnabling(action, actionItem.getItem()));
} else {
if (action instanceof ActionButtonDescriptor) {
- if (isItemSelected && actionRegistry.checkEnabling(action, session.getCurrentStateToken())) {
- toolbar.addButtonAction((ActionButtonDescriptor<StateToken>) action);
+ if (isItemSelected && actionRegistry.checkEnabling(action, actionItem.getItem())) {
+ toolbar.addButtonAction(actionItem);
}
} else {
// Code smell
- Log.error("Not an ActionMenuDescriptor or ActionButtonDescriptor");
+ Log.error("Not an ActionMenuDescriptor or ActionButtonDescriptor: " + action.getText());
}
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarView.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -1,14 +1,13 @@
package org.ourproject.kune.platf.client.actions.toolbar;
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionItem;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ActionToolbarView {
- void addButtonAction(ActionButtonDescriptor<StateToken> action);
+ void addButtonAction(ActionItem<StateToken> action);
- void addMenuAction(ActionMenuDescriptor<StateToken> action, boolean enable);
+ void addMenuAction(ActionItem<StateToken> action, boolean enable);
void clear();
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -331,9 +331,8 @@
register(Singleton.class, new Factory<ContextNavigator>(ContextNavigator.class) {
public ContextNavigator create() {
final ActionToolbarPanel contextNavigatorToolbar = new ActionToolbarPanel(
- ActionToolbarPanel.Position.context, $(Session.class), $$(ActionManager.class),
- $(WorkspaceSkeleton.class));
- final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contextNavigatorToolbar,
+ ActionToolbarPanel.Position.context, $$(ActionManager.class), $(WorkspaceSkeleton.class));
+ final ActionToolbar toolbar = new ActionToolbarPresenter(contextNavigatorToolbar,
$(ContextActionRegistry.class));
final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class),
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -98,7 +98,7 @@
public void onHistoryChanged(final String historyToken) {
final Listener<StateToken> tokenListener = siteTokens.get(historyToken);
- Log.debug("history token: " + historyToken);
+ Log.debug("StateManager: history token changed (" + historyToken + ")");
if (tokenListener == null) {
onHistoryChanged(new StateToken(historyToken));
} else {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -115,8 +115,7 @@
dialog.setClosable(true);
dialog.setCloseAction(Window.HIDE);
dialog.setMinimizable(true);
- dialog.setUploadAutostart(true);
- // Here fails
+ dialog.setUploadAutostart(false);
dialog.addListener(new UploadDialogListenerAdapter() {
@Override
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -20,16 +20,16 @@
}
public boolean checkFolderChange() {
- final StateToken currentStateToken = session.getCurrentStateToken();
+ final StateToken currentFolderStateToken = session.getCurrentStateToken().clone().clearDocument();
if (sameContainer()) {
- view.setUploadParams(session.getUserHash(), currentStateToken.toString());
+ view.setUploadParams(session.getUserHash(), currentFolderStateToken.toString());
return true;
}
if (view.hasUploadingFiles()) {
return false;
} else {
- currentUploadStateToken = currentStateToken;
- view.setUploadParams(session.getUserHash(), currentStateToken.toString());
+ currentUploadStateToken = currentFolderStateToken;
+ view.setUploadParams(session.getUserHash(), currentFolderStateToken.toString());
return true;
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -3,11 +3,6 @@
import java.io.File;
import java.io.IOException;
-import net.sf.jmimemagic.MagicException;
-import net.sf.jmimemagic.MagicMatch;
-import net.sf.jmimemagic.MagicMatchNotFoundException;
-import net.sf.jmimemagic.MagicParseException;
-
public interface FileManager {
/**
@@ -23,8 +18,6 @@
*/
File createFileWithSequentialName(String dir, String fileName) throws IOException;
- MagicMatch getMimeType(File file) throws MagicParseException, MagicMatchNotFoundException, MagicException;
-
/**
* @param dir
* the directory (use File.separator for dir delimiters)
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -3,12 +3,6 @@
import java.io.File;
import java.io.IOException;
-import net.sf.jmimemagic.Magic;
-import net.sf.jmimemagic.MagicException;
-import net.sf.jmimemagic.MagicMatch;
-import net.sf.jmimemagic.MagicMatchNotFoundException;
-import net.sf.jmimemagic.MagicParseException;
-
import org.ourproject.kune.platf.server.manager.FileManager;
import com.google.inject.Singleton;
@@ -27,11 +21,6 @@
return file;
}
- public MagicMatch getMimeType(final File file) throws MagicParseException, MagicMatchNotFoundException,
- MagicException {
- return Magic.getMagicMatch(file, true);
- }
-
public boolean mkdir(final String dir) {
return (new File(dir)).mkdirs();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -12,10 +12,6 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import net.sf.jmimemagic.MagicException;
-import net.sf.jmimemagic.MagicMatch;
-import net.sf.jmimemagic.MagicMatchNotFoundException;
-import net.sf.jmimemagic.MagicParseException;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
@@ -145,23 +141,9 @@
file = fileManager.createFileWithSequentialName(absDir, filenameUTF8);
fileUploadItem.write(file);
- log.info("fileItem mime type: " + fileUploadItem.getContentType());
+ final String mimetype = fileUploadItem.getContentType();
+ final String extension = FileUtils.getFileNameExtension(filenameUTF8, false);
- String mimetype = "unknown/unknown";
- String extension = "";
- try {
- final MagicMatch magicMatch = fileManager.getMimeType(file);
-
- extension = magicMatch.getExtension();
- mimetype = magicMatch.getMimeType();
- } catch (final MagicParseException e) {
- log.info("Exception: " + e.getCause());
- } catch (final MagicMatchNotFoundException e) {
- log.info("Exception: " + e.getCause());
- } catch (final MagicException e) {
- log.info("Exception: " + e.getCause());
- }
-
// Persist
final User user = userSession.getUser();
final Container container = accessService.accessToContainer(ContentUtils.parseId(stateToken.getFolder()),
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorItem.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorItem.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorItem.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -1,6 +1,6 @@
package org.ourproject.kune.workspace.client.ctxnav;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
+import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.dto.ContentStatusDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
@@ -11,13 +11,13 @@
private final String text;
private final ContentStatusDTO contentStatusDTO;
private final StateToken token;
- private final ActionCollection<StateToken> actionCollection;
+ private final ActionItemCollection<StateToken> actionCollection;
private final boolean allowDrag;
private final boolean allowDrop;
public ContextNavigatorItem(final String id, final String parentId, final String iconUrl, final String text,
final ContentStatusDTO contentStatusDTO, final StateToken token, final boolean allowDrag,
- final boolean allowDrop, final ActionCollection<StateToken> actionCollection) {
+ final boolean allowDrop, final ActionItemCollection<StateToken> actionCollection) {
this.id = id;
this.parentId = parentId;
this.iconUrl = iconUrl;
@@ -29,7 +29,7 @@
this.actionCollection = actionCollection;
}
- public ActionCollection<StateToken> getActionCollection() {
+ public ActionItemCollection<StateToken> getActionCollection() {
return actionCollection;
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -22,8 +22,9 @@
import java.util.HashMap;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionItem;
+import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
@@ -47,6 +48,7 @@
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
import com.gwtext.client.widgets.tree.DropNodeCallback;
+import com.gwtext.client.widgets.tree.MultiSelectionModel;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
@@ -87,7 +89,7 @@
child.setHref("#" + item.getStateToken().toString());
child.setAllowDrag(item.isDraggable());
child.setAllowDrop(item.isDroppable());
- createItemMenu(nodeId, item.getActionCollection(), item.getStateToken());
+ createItemMenu(nodeId, item.getActionCollection());
final TreeNode parent = treePanel.getNodeById(item.getParentId());
if (parent != null) {
// Log.info("Adding child node: " + nodeId + " to folder: " +
@@ -185,32 +187,27 @@
node.setText(text);
}
- public void setRootItem(final String id, final String text, final StateToken stateToken,
- final ActionCollection<StateToken> actions) {
+ public void setRootItem(final String id, final String text, final StateToken stateToken) {
if (treePanel == null || treePanel.getNodeById(id) == null) {
- createTreePanel(id, text, stateToken, actions);
+ createTreePanel(id, text, stateToken);
}
}
- private void createItemMenu(final String nodeId, final ActionCollection<StateToken> actionCollection,
- final StateToken stateToken) {
+ private void createItemMenu(final String nodeId, final ActionItemCollection<StateToken> actionCollection) {
DeferredCommand.addCommand(new Command() {
public void execute() {
Menu menu = null;
if (actionCollection != null) {
menu = new Menu();
// Remove if when retrieved rights of siblings
- for (final ActionDescriptor<StateToken> action : actionCollection) {
+ for (final ActionItem<StateToken> actionItem : actionCollection) {
+ final ActionDescriptor<StateToken> action = actionItem.getAction();
final Item item = new Item(action.getText());
item.setIcon(action.getIconUrl());
menu.addItem(item);
item.addListener(new BaseItemListenerAdapter() {
public void onClick(final BaseItem item, final EventObject e) {
- DeferredCommand.addCommand(new Command() {
- public void execute() {
- doAction(action, stateToken);
- }
- });
+ doAction(actionItem);
}
});
}
@@ -220,17 +217,16 @@
});
}
- private void createTreePanel(final String rootId, final String text, final StateToken stateToken,
- final ActionCollection<StateToken> actions) {
+ private void createTreePanel(final String rootId, final String text, final StateToken stateToken) {
if (treePanel != null) {
clear();
}
treePanel = new TreePanel();
treePanel.setAnimate(true);
treePanel.setBorder(false);
- treePanel.setRootVisible(true);
+ treePanel.setRootVisible(false);
treePanel.setUseArrows(true);
- // treePanel.setSelectionModel(new MultiSelectionModel());
+ treePanel.setSelectionModel(new MultiSelectionModel());
final TreeNode root = new TreeNode();
root.setAllowDrag(false);
root.setExpanded(true);
@@ -238,7 +234,6 @@
root.setText(text);
root.setHref("#" + stateToken);
root.expand();
- createItemMenu(rootId, actions, stateToken);
treePanel.addListener(new TreePanelListenerAdapter() {
public boolean doBeforeNodeDrop(final TreePanel treePanel, final TreeNode target, final DragData dragData,
final String point, final DragDrop source, final TreeNode dropNode,
@@ -284,8 +279,8 @@
ws.getEntityWorkspace().setContext(panel);
}
- private void doAction(final ActionDescriptor<StateToken> action, final StateToken stateToken) {
- actionManager.doAction(action, stateToken);
+ private void doAction(final ActionItem<StateToken> actionItem) {
+ actionManager.doAction(actionItem);
}
private TreeNode getNode(final String id) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -20,11 +20,12 @@
package org.ourproject.kune.workspace.client.ctxnav;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_FOLDER;
+
import java.util.HashMap;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
-import org.ourproject.kune.platf.client.actions.ActionCollectionSet;
+import org.ourproject.kune.platf.client.actions.ActionItemCollection;
import org.ourproject.kune.platf.client.actions.ActionRegistry;
import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
@@ -58,7 +59,7 @@
private final Session session;
private final Provider<ContentServiceAsync> contentServiceProvider;
private final I18nUITranslationService i18n;
- private final HashMap<StateToken, ActionCollection<StateToken>> actionsByItem;
+ private final HashMap<StateToken, ActionItemCollection<StateToken>> actionsByItem;
private final EntityTitle entityTitle;
private boolean editOnNextStateChange;
private final ContentIconsRegistry contentIconsRegistry;
@@ -80,7 +81,7 @@
this.dragDropContentRegistry = dragDropContentRegistry;
this.actionRegistry = actionRegistry;
this.toolbar = toolbar;
- actionsByItem = new HashMap<StateToken, ActionCollection<StateToken>>();
+ actionsByItem = new HashMap<StateToken, ActionItemCollection<StateToken>>();
editOnNextStateChange = false;
}
@@ -190,30 +191,33 @@
// childs to view)
final ContainerDTO root = state.getRootContainer();
if (root != null) {
- final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(containerRights, root
- .getTypeId());
- view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken(), set
- .getItemActions());
- toolbar.showActions(set.getToolbarActions(), false);
+ view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken());
createChildItems(root, containerRights);
- actionsByItem.put(root.getStateToken(), set.getToolbarActions());
}
// Do the path to our current content
createTreePath(stateToken, container.getAbsolutePath(), containerRights);
// Process our current content/container
+ final ActionItemCollection<StateToken> actionItems = new ActionItemCollection<StateToken>();
if (state.hasDocument()) {
rights = state.getContentRights();
- addItem(state.getTitle(), state.getTypeId(), state.getMimeType(), state.getStatus(), stateToken, container
- .getStateToken(), rights, false);
+ final ActionItemCollection<StateToken> contentActions = addItem(state.getTitle(), state.getTypeId(), state
+ .getMimeType(), state.getStatus(), stateToken, container.getStateToken(), rights, false);
+ final ActionItemCollection<StateToken> containerActions = actionRegistry.getCurrentActions(container
+ .getStateToken(), container.getTypeId(), containerRights, true);
+ actionItems.addAll(containerActions);
+ actionItems.addAll(contentActions);
+
} else {
rights = containerRights;
- addItem(container.getName(), container.getTypeId(), null, ContentStatusDTO.publishedOnline, container
- .getStateToken(), container.getStateToken().clone().setFolder(container.getParentFolderId()),
- containerRights, false);
+ final ActionItemCollection<StateToken> containerActions = addItem(container.getName(), container
+ .getTypeId(), null, ContentStatusDTO.publishedOnline, container.getStateToken(), container
+ .getStateToken().clone().setFolder(container.getParentFolderId()), containerRights, false);
+ actionItems.addAll(containerActions);
}
+ actionsByItem.put(stateToken, actionItems);
// Process container childs
createChildItems(container, containerRights);
@@ -227,7 +231,6 @@
if (select) {
selectItem(stateToken);
}
-
}
}
@@ -237,20 +240,21 @@
actionsByItem.clear();
}
- private void addItem(final String title, final String contentTypeId, final BasicMimeTypeDTO mimeType,
- final ContentStatusDTO status, final StateToken stateToken, final StateToken parentStateToken,
- final AccessRightsDTO rights, final boolean isNodeSelected) {
+ private ActionItemCollection<StateToken> addItem(final String title, final String contentTypeId,
+ final BasicMimeTypeDTO mimeType, final ContentStatusDTO status, final StateToken stateToken,
+ final StateToken parentStateToken, final AccessRightsDTO rights, final boolean isNodeSelected) {
- final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(rights, contentTypeId);
- toolbar.showActions(set.getToolbarActions(), isNodeSelected);
+ final ActionItemCollection<StateToken> toolbarActions = actionRegistry.getCurrentActions(stateToken,
+ contentTypeId, rights, true);
- final String contentTypeIcon = contentIconsRegistry.getContentTypeIcon(contentTypeId, mimeType);
+ final String contentTypeIcon = contentTypeId.equals(TYPE_FOLDER) ? "" : contentIconsRegistry
+ .getContentTypeIcon(contentTypeId, mimeType);
final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken),
contentTypeIcon, title, status, stateToken, dragDropContentRegistry.isDraggable(contentTypeId, rights
.isAdministrable()), dragDropContentRegistry.isDroppable(contentTypeId, rights
- .isAdministrable()), set.getItemActions());
+ .isAdministrable()), actionRegistry.getCurrentActions(stateToken, contentTypeId, rights, false));
view.addItem(item);
- actionsByItem.put(stateToken, set.getToolbarActions());
+ return toolbarActions;
}
private void createChildItems(final ContainerDTO container, final AccessRightsDTO containerRights) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorView.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -21,7 +21,6 @@
package org.ourproject.kune.workspace.client.ctxnav;
import org.ourproject.kune.platf.client.View;
-import org.ourproject.kune.platf.client.actions.ActionCollection;
import org.ourproject.kune.platf.client.dto.StateToken;
public interface ContextNavigatorView extends View {
@@ -42,6 +41,6 @@
void setItemText(String id, String text);
- void setRootItem(String id, String text, StateToken stateToken, ActionCollection<StateToken> actions);
+ void setRootItem(String id, String text, StateToken stateToken);
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -21,9 +21,12 @@
@Test
public void actionsEmptyButNeverNull() {
- checkActionLists(0, 0, new AccessRightsDTO(true, true, true));
- checkActionLists(0, 0, new AccessRightsDTO(false, true, true));
- checkActionLists(0, 0, new AccessRightsDTO(false, false, true));
+ checkActionLists(0, new AccessRightsDTO(true, true, true), true);
+ checkActionLists(0, new AccessRightsDTO(true, true, true), false);
+ checkActionLists(0, new AccessRightsDTO(false, true, true), true);
+ checkActionLists(0, new AccessRightsDTO(false, true, true), false);
+ checkActionLists(0, new AccessRightsDTO(false, false, true), true);
+ checkActionLists(0, new AccessRightsDTO(false, false, true), false);
}
@Before
@@ -50,19 +53,22 @@
@Test
public void testAddWhenAdmin() {
addDefActions();
- checkActionLists(3, 3, new AccessRightsDTO(true, true, true));
+ checkActionLists(3, new AccessRightsDTO(true, true, true), true);
+ checkActionLists(3, new AccessRightsDTO(true, true, true), false);
}
@Test
public void testAddWhenEditor() {
addDefActions();
- checkActionLists(2, 2, new AccessRightsDTO(false, true, true));
+ checkActionLists(2, new AccessRightsDTO(false, true, true), true);
+ checkActionLists(2, new AccessRightsDTO(false, true, true), false);
}
@Test
public void testAddWhenViewer() {
addDefActions();
- checkActionLists(1, 1, new AccessRightsDTO(false, false, true));
+ checkActionLists(1, new AccessRightsDTO(false, false, true), true);
+ checkActionLists(1, new AccessRightsDTO(false, false, true), false);
}
@Test
@@ -93,11 +99,9 @@
registry.addAction(DEF_CONTENT_TYPE_ID, viewerAction);
}
- private void checkActionLists(final int expectedToolActions, final int expectedItemActions,
- final AccessRightsDTO accessRightsDTO) {
- assertEquals(expectedItemActions, registry.selectCurrentActions(accessRightsDTO, DEF_CONTENT_TYPE_ID)
- .getToolbarActions().size());
- assertEquals(expectedItemActions, registry.selectCurrentActions(accessRightsDTO, DEF_CONTENT_TYPE_ID)
- .getItemActions().size());
+ private void checkActionLists(final int expectedActions, final AccessRightsDTO accessRightsDTO,
+ final boolean toolbarActions) {
+ assertEquals(expectedActions, registry.getCurrentActions(new StateToken(), DEF_CONTENT_TYPE_ID,
+ accessRightsDTO, toolbarActions).size());
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-26 14:56:55 UTC (rev 886)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-27 03:22:43 UTC (rev 887)
@@ -26,6 +26,13 @@
}
@Test
+ public void testFirstAddFromDocInSameContainer() {
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1.1"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.verify(view, Mockito.times(1)).setUploadParams(SOMEUSER_HASH, "group.tool.1");
+ }
+
+ @Test
public void testFirstAddInSameContainer() {
Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1"));
assertTrue(presenter.checkFolderChange());
1
0
Author: vjrj
Date: 2008-09-26 16:56:55 +0200 (Fri, 26 Sep 2008)
New Revision: 886
Added:
trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentUtils.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileDownloadManager.java
Modified:
trunk/pom.xml
trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReader.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java
trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java
trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
trunk/src/main/resources/db/liquibase_changelog.xml
trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java
Log:
liquibase migration, download servlet, content uploaded file show tests
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/pom.xml 2008-09-26 14:56:55 UTC (rev 886)
@@ -224,8 +224,13 @@
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
- <version>1.4.1</version>
+ <version>1.7.0</version>
</dependency>
+ <dependency>
+ <groupId>org.liquibase</groupId>
+ <artifactId>liquibase-plugin</artifactId>
+ <version>1.7.0.0</version>
+ </dependency>
<!-- jetty dependencies -->
<dependency>
@@ -424,7 +429,7 @@
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-plugin</artifactId>
- <version>1.4.1.0</version>
+ <version>1.7.0.0</version>
<executions>
<execution>
<phase>process-resources</phase>
@@ -447,7 +452,7 @@
</configuration>
-->
<goals>
- <goal>migrate</goal>
+ <goal>update</goal>
</goals>
</execution>
</executions>
Modified: trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -28,6 +28,7 @@
import org.ourproject.kune.platf.client.rpc.SocialNetworkService;
import org.ourproject.kune.platf.server.LoggerMethodInterceptor;
import org.ourproject.kune.platf.server.PlatformServerModule;
+import org.ourproject.kune.platf.server.manager.impl.FileDownloadManager;
import org.ourproject.kune.platf.server.manager.impl.FileUploadManager;
import org.ourproject.kune.platf.server.properties.PropertiesFileName;
import org.ourproject.kune.platf.server.rest.ContentJSONService;
@@ -96,7 +97,7 @@
UserService.class, SocialNetworkService.class, I18nService.class);
builder.installRESTServices("^/kune/json/", TestJSONService.class, GroupJSONService.class,
UserJSONService.class, I18nTranslationJSONService.class, ContentJSONService.class);
- builder.installServlet("^/kune/servlets/", FileUploadManager.class);
+ builder.installServlet("^/kune/servlets/", FileUploadManager.class, FileDownloadManager.class);
builder.at("^/kune/(.*)$").install(new ForwardFilter("^/kune/(.*)$", "/gwt/org.ourproject.kune.app.Kune/{0}"));
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -173,7 +173,8 @@
register(Singleton.class, new Factory<DocumentReader>(DocumentReader.class) {
public DocumentReader create() {
final DocumentReaderView view = new DocumentReaderPanel($(WorkspaceSkeleton.class));
- final DocumentReaderPresenter presenter = new DocumentReaderPresenter(view);
+ final DocumentReaderPresenter presenter = new DocumentReaderPresenter($(Session.class), view,
+ $(I18nUITranslationService.class));
return presenter;
}
});
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -203,9 +203,9 @@
private void showContent() {
textEditorProvider.get().setToolbarVisible(false);
if (content.hasDocument()) {
- docReaderProvider.get().showDocument(content.getContent());
+ docReaderProvider.get().showDocument(content.getStateToken(), content.getContent(), content.getTypeId(),
+ content.getMimeType());
textEditorProvider.get().reset();
- docReaderProvider.get().show();
} else {
final FolderViewer viewer = folderViewerProvider.get();
viewer.setFolder(content.getContainer());
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReader.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReader.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReader.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -21,12 +21,12 @@
package org.ourproject.kune.docs.client.cnt.reader;
import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
public interface DocumentReader {
View getView();
- void show();
-
- void showDocument(String text);
+ void showDocument(StateToken token, String text, String typeId, BasicMimeTypeDTO mimeType);
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderPresenter.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/reader/DocumentReaderPresenter.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -20,23 +20,47 @@
package org.ourproject.kune.docs.client.cnt.reader;
+import org.ourproject.kune.docs.client.DocumentClientTool;
import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
public class DocumentReaderPresenter implements DocumentReader {
private final DocumentReaderView view;
+ private final I18nUITranslationService i18n;
+ private final Session session;
- public DocumentReaderPresenter(final DocumentReaderView view) {
+ public DocumentReaderPresenter(final Session session, final DocumentReaderView view,
+ final I18nUITranslationService i18n) {
+ this.session = session;
this.view = view;
+ this.i18n = i18n;
}
public View getView() {
return view;
}
- public void show() {
+ public void showDocument(final StateToken token, final String text, final String typeId,
+ final BasicMimeTypeDTO mimeType) {
+ if (typeId.equals(DocumentClientTool.TYPE_UPLOADEDFILE)) {
+ if (mimeType != null) {
+ final String url = "/kune/servlets/FileDownloadManager?token=" + token + "&hash="
+ + session.getUserHash();
+ if (mimeType.getType().equals("image")) {
+ view.setContent("<img src=\"" + url + "\">");
+ } else if (mimeType.toString().equals("text/plain")) {
+ view.setContent(text);
+ } else {
+ view.setContent("<a href=\"" + url + "\">" + i18n.t("Download") + "</a>");
+ }
+ } else {
+ view.setContent("<a href=\"" + "dd" + "\">" + i18n.t("Download") + "</a>");
+ }
+ } else {
+ view.setContent(text);
+ }
}
-
- public void showDocument(final String text) {
- view.setContent(text);
- }
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -63,6 +63,7 @@
import org.ourproject.kune.platf.server.manager.TagManager;
import org.ourproject.kune.platf.server.manager.ToolConfigurationManager;
import org.ourproject.kune.platf.server.manager.UserManager;
+import org.ourproject.kune.platf.server.manager.impl.FileDownloadManager;
import org.ourproject.kune.platf.server.manager.impl.FileManagerDefault;
import org.ourproject.kune.platf.server.manager.impl.FileUploadManager;
import org.ourproject.kune.platf.server.manager.impl.GroupManagerDefault;
@@ -109,6 +110,7 @@
bind(Mapper.class).to(DozerMapper.class);
bind(ToolRegistry.class);
bind(FileUploadManager.class);
+ bind(FileDownloadManager.class);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authenticated.class),
outermostCall(new AuthenticatedMethodInterceptor()));
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/auth/AuthorizatedMethodInterceptor.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -25,12 +25,12 @@
import org.aopalliance.intercept.MethodInvocation;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.errors.AccessViolationException;
-import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
import org.ourproject.kune.platf.server.UserSession;
import org.ourproject.kune.platf.server.access.AccessRights;
import org.ourproject.kune.platf.server.access.AccessRightsService;
import org.ourproject.kune.platf.server.access.AccessRol;
import org.ourproject.kune.platf.server.access.AccessService;
+import org.ourproject.kune.platf.server.content.ContentUtils;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
import org.ourproject.kune.platf.server.domain.Group;
@@ -76,18 +76,20 @@
switch (actionLevel) {
case content:
default:
- final Content content = accessService.accessToContent(parseId(token.getDocument()), user, accessRol);
+ final Content content = accessService.accessToContent(ContentUtils.parseId(token.getDocument()), user,
+ accessRol);
if (!content.getContainer().getOwner().equals(group)) {
throw new AccessViolationException();
}
- if (!content.getContainer().getId().equals(parseId(token.getFolder()))) {
+ if (!content.getContainer().getId().equals(ContentUtils.parseId(token.getFolder()))) {
throw new AccessViolationException();
}
if (!content.getContainer().getToolName().equals(token.getTool())) {
throw new AccessViolationException();
}
case container:
- final Container container = accessService.accessToContainer(parseId(token.getFolder()), user, accessRol);
+ final Container container = accessService.accessToContainer(ContentUtils.parseId(token.getFolder()), user,
+ accessRol);
if (!container.getOwner().equals(group)) {
throw new AccessViolationException();
}
@@ -119,12 +121,4 @@
}
}
- private Long parseId(final String documentId) throws ContentNotFoundException {
- try {
- return new Long(documentId);
- } catch (final NumberFormatException e) {
- throw new ContentNotFoundException();
- }
- }
-
}
Added: trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentUtils.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/content/ContentUtils.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -0,0 +1,14 @@
+package org.ourproject.kune.platf.server.content;
+
+import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
+
+public class ContentUtils {
+
+ public static Long parseId(final String id) throws ContentNotFoundException {
+ try {
+ return new Long(id);
+ } catch (final NumberFormatException e) {
+ throw new ContentNotFoundException();
+ }
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileDownloadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileDownloadManager.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileDownloadManager.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -0,0 +1,105 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.errors.ContentNotFoundException;
+import org.ourproject.kune.platf.server.access.AccessRol;
+import org.ourproject.kune.platf.server.auth.ActionLevel;
+import org.ourproject.kune.platf.server.auth.Authenticated;
+import org.ourproject.kune.platf.server.auth.Authorizated;
+import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.content.ContentUtils;
+import org.ourproject.kune.platf.server.domain.BasicMimeType;
+import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.properties.KuneProperties;
+
+import com.google.inject.Inject;
+
+/**
+ * Some snippets from:
+ * http://www.onjava.com/pub/a/onjava/excerpt/jebp_3/index1.html?page=1
+ *
+ */
+public class FileDownloadManager extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+
+ @Inject
+ ContentManager contentManager;
+ @Inject
+ KuneProperties kuneProperties;
+
+ public void returnFile(final String filename, final OutputStream out) throws FileNotFoundException, IOException {
+ InputStream in = null;
+ try {
+ in = new BufferedInputStream(new FileInputStream(filename));
+ final byte[] buf = new byte[4 * 1024]; // 4K buffer
+ int bytesRead;
+ while ((bytesRead = in.read(buf)) != -1) {
+ out.write(buf, 0, bytesRead);
+ }
+ } finally {
+ if (in != null) {
+ in.close();
+ }
+ }
+ }
+
+ @Override
+ protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException,
+ IOException {
+
+ final String userHash = req.getParameter("hash");
+ final StateToken stateToken = new StateToken(req.getParameter("token"));
+ final Content cnt = getContentForDownload(userHash, stateToken);
+
+ final String absDir = kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + FileUtils.toDir(stateToken);
+ final String filename = new String(cnt.getLastRevision().getBody());
+ final String absFilename = absDir + filename;
+
+ doBuildResp(resp, absFilename, cnt.getTitle(), cnt.getMimeType(), FileUtils
+ .getFileNameExtension(filename, true));
+ }
+
+ private void doBuildResp(final HttpServletResponse resp, final String filename, final String otherName,
+ final BasicMimeType mimeType, final String extension) throws FileNotFoundException, IOException {
+ final File file = new File(filename);
+
+ resp.setContentLength((int) file.length());
+ if (mimeType == null) {
+ resp.setContentType("application/x-download");
+ } else if (mimeType.getType().equals("image") || mimeType.toString().equals("text/plain")) {
+ resp.setContentType(mimeType.toString());
+ } else {
+ resp.setContentType("application/x-download");
+ }
+ resp.setHeader("Content-Disposition", "attachment; filename=\"" + otherName + extension + "\"");
+
+ final OutputStream out = resp.getOutputStream();
+ returnFile(filename, out);
+ }
+
+ @Authenticated(mandatory = false)
+ @Authorizated(accessRolRequired = AccessRol.Viewer, actionLevel = ActionLevel.content)
+ private Content getContentForDownload(final String userHash, final StateToken stateToken) throws ServletException {
+ try {
+ return contentManager.find(ContentUtils.parseId(stateToken.getDocument()));
+ } catch (final ContentNotFoundException e) {
+ // what response to send in this case ?
+ throw new ServletException();
+ }
+
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -3,9 +3,7 @@
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
import java.io.Writer;
-import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
@@ -37,6 +35,7 @@
import org.ourproject.kune.platf.server.auth.Authenticated;
import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.content.ContentUtils;
import org.ourproject.kune.platf.server.domain.BasicMimeType;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
@@ -54,8 +53,6 @@
public static final Log log = LogFactory.getLog(FileUploadManager.class);
- private static final String SLASH = File.separator;
-
private static final String UTF8 = "UTF-8";
private static final long serialVersionUID = 1L;
@@ -118,7 +115,7 @@
file = item;
}
}
- createFile(userHash, stateToken, fileName, file);
+ createUploadedFile(userHash, stateToken, fileName, file);
} catch (final FileUploadException e) {
jsonResponse = createJsonResponse(false, i18n.t("Error: File too large"));
} catch (final Exception e) {
@@ -136,47 +133,50 @@
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor, actionLevel = ActionLevel.container)
@Transactional(type = TransactionType.READ_WRITE)
- Content createFile(final String userHash, final StateToken stateToken, final String fileName,
+ Content createUploadedFile(final String userHash, final StateToken stateToken, final String fileName,
final FileItem fileUploadItem) throws Exception {
- final String relDir = calculateUploadDirLocation(stateToken, false);
- final String relDirEncoded = calculateUploadDirLocation(stateToken, true);
+ final String relDir = FileUtils.toDir(stateToken);
final String absDir = kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + relDir;
fileManager.mkdir(absDir);
- final String filenameUTF8 = new String(fileName.getBytes(), UTF8);
- final File file = fileManager.createFileWithSequentialName(absDir, filenameUTF8);
- fileUploadItem.write(file);
- // FIXME remove file if not success
- String mimetype = "unknown/unknown";
- String extension = "";
+ File file = null;
try {
- final MagicMatch magicMatch = fileManager.getMimeType(file);
- extension = magicMatch.getExtension();
- mimetype = magicMatch.getMimeType();
- } catch (final MagicParseException e) {
- log.info("Exception: " + e.getCause());
- } catch (final MagicMatchNotFoundException e) {
- log.info("Exception: " + e.getCause());
- } catch (final MagicException e) {
- log.info("Exception: " + e.getCause());
- }
+ final String filenameUTF8 = new String(fileName.getBytes(), UTF8);
+ file = fileManager.createFileWithSequentialName(absDir, filenameUTF8);
+ fileUploadItem.write(file);
- // Persist
- final User user = userSession.getUser();
- final Container container = accessService.accessToContainer(new Long(stateToken.getFolder()), user,
- AccessRol.Editor);
- final Content content = contentManager.createContent(FileUtils.getFileNameWithoutExtension(file.getName(),
- extension), relDirEncoded + SLASH + URLEncoder.encode(filenameUTF8, UTF8), user, container);
- content.setTypeId(DocumentServerTool.TYPE_UPLOADEDFILE);
- content.setMimeType(new BasicMimeType(mimetype));
- return content;
- }
+ log.info("fileItem mime type: " + fileUploadItem.getContentType());
- private String calculateUploadDirLocation(final StateToken stateToken, final boolean urlEncoded)
- throws UnsupportedEncodingException {
- final String group = stateToken.getGroup();
- return SLASH + (urlEncoded ? URLEncoder.encode(group, UTF8) : group) + SLASH + stateToken.getTool() + SLASH
- + stateToken.getFolder();
+ String mimetype = "unknown/unknown";
+ String extension = "";
+ try {
+ final MagicMatch magicMatch = fileManager.getMimeType(file);
+
+ extension = magicMatch.getExtension();
+ mimetype = magicMatch.getMimeType();
+ } catch (final MagicParseException e) {
+ log.info("Exception: " + e.getCause());
+ } catch (final MagicMatchNotFoundException e) {
+ log.info("Exception: " + e.getCause());
+ } catch (final MagicException e) {
+ log.info("Exception: " + e.getCause());
+ }
+
+ // Persist
+ final User user = userSession.getUser();
+ final Container container = accessService.accessToContainer(ContentUtils.parseId(stateToken.getFolder()),
+ user, AccessRol.Editor);
+ final Content content = contentManager.createContent(FileUtils.getFileNameWithoutExtension(file.getName(),
+ extension), filenameUTF8, user, container);
+ content.setTypeId(DocumentServerTool.TYPE_UPLOADEDFILE);
+ content.setMimeType(new BasicMimeType(mimetype));
+ return content;
+ } catch (final Exception e) {
+ if (file != null && file.exists()) {
+ file.delete();
+ }
+ throw e;
+ }
}
private JSONObject createJsonResponse(final boolean success, final String message) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -1,7 +1,35 @@
package org.ourproject.kune.platf.server.manager.impl;
+import java.io.File;
+
+import org.ourproject.kune.platf.client.dto.StateToken;
+
public class FileUtils {
+ public static final String SLASH = File.separator;
+
+ /**
+ * For filename extension info see:
+ * http://en.wikipedia.org/wiki/File_name_extension
+ *
+ * @param fileName
+ * @return
+ */
+ public static String getFileNameExtension(final String fileName, final boolean withDot) {
+ // also we can use FilenameUtils
+ final int dotIndex = fileName.lastIndexOf(".");
+ if (dotIndex == -1 || dotIndex == 0) {
+ return "";
+ } else {
+ if (withDot) {
+ final String ext = fileName.substring(dotIndex);
+ return ext.length() == 1 ? "" : ext;
+ } else {
+ return fileName.substring(dotIndex + 1);
+ }
+ }
+ }
+
public static String getFileNameWithoutExtension(final String fileName, final String extension) {
final int extlength = extension.length();
if (extlength > 0) {
@@ -36,4 +64,8 @@
return getNextSequentialFileName(fileName.substring(0, dotIndex)) + ext;
}
}
+
+ public static String toDir(final StateToken stateToken) {
+ return SLASH + stateToken.getGroup() + SLASH + stateToken.getTool() + SLASH + stateToken.getFolder() + SLASH;
+ }
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/rpc/ContentRPC.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -53,6 +53,7 @@
import org.ourproject.kune.platf.server.content.CommentManager;
import org.ourproject.kune.platf.server.content.ContainerManager;
import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.content.ContentUtils;
import org.ourproject.kune.platf.server.content.CreationService;
import org.ourproject.kune.platf.server.domain.AccessLists;
import org.ourproject.kune.platf.server.domain.Comment;
@@ -116,7 +117,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public void addAuthor(final String userHash, final StateToken token, final String authorShortName)
throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.addAuthor(user, contentId, authorShortName);
@@ -129,7 +130,7 @@
final String commentText) throws DefaultException {
final UserSession userSession = getUserSession();
final User author = userSession.getUser();
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.addComment(author, contentId, commentText, parentCommentId);
return mapper.map(comment, CommentDTO.class);
}
@@ -141,7 +142,7 @@
throws DefaultException {
final UserSession userSession = getUserSession();
final User author = userSession.getUser();
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.addComment(author, contentId, commentText);
return mapper.map(comment, CommentDTO.class);
}
@@ -155,8 +156,8 @@
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final boolean userIsLoggedIn = userSession.isUserLoggedIn();
- final Container container = accessService.accessToContainer(parseId(parentToken.getFolder()), user,
- AccessRol.Editor);
+ final Container container = accessService.accessToContainer(ContentUtils.parseId(parentToken.getFolder()),
+ user, AccessRol.Editor);
final Content addedContent = creationService.createContent(title, "", user, container);
final Access access = accessService.getAccess(user, addedContent.getStateToken(), group, AccessRol.Editor);
final State state = stateService.create(access);
@@ -173,7 +174,8 @@
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final boolean userIsLoggedIn = userSession.isUserLoggedIn();
- final State state = createFolder(parentToken.getGroup(), parseId(parentToken.getFolder()), title, contentTypeId);
+ final State state = createFolder(parentToken.getGroup(), ContentUtils.parseId(parentToken.getFolder()), title,
+ contentTypeId);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
}
@@ -194,7 +196,7 @@
xmppManager.createRoom(connection, roomName, userShortName + userHash);
xmppManager.disconnect(connection);
try {
- final State state = createFolder(groupShortName, parseId(parentToken.getFolder()), roomName,
+ final State state = createFolder(groupShortName, ContentUtils.parseId(parentToken.getFolder()), roomName,
ChatServerTool.TYPE_ROOM);
completeState(user, userIsLoggedIn, group, state);
return mapState(state, user, group);
@@ -214,7 +216,7 @@
@Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
public void delContent(final String userHash, final StateToken token) throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.delContent(user, contentId);
@@ -264,7 +266,7 @@
throws DefaultException {
final UserSession userSession = getUserSession();
final User informer = userSession.getUser();
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.markAsAbuse(informer, contentId, commentId);
return mapper.map(comment, CommentDTO.class);
}
@@ -275,7 +277,7 @@
public void rateContent(final String userHash, final StateToken token, final Double value) throws DefaultException {
final UserSession userSession = getUserSession();
final User rater = userSession.getUser();
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
if (userSession.isUserLoggedIn()) {
contentManager.rateContent(rater, contentId, value);
@@ -289,7 +291,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public void removeAuthor(final String userHash, final StateToken token, final String authorShortName)
throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.removeAuthor(user, contentId, authorShortName);
@@ -300,7 +302,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public String renameContainer(final String userHash, final StateToken token, final String newName)
throws DefaultException {
- return renameFolder(token.getGroup(), parseId(token.getFolder()), newName);
+ return renameFolder(token.getGroup(), ContentUtils.parseId(token.getFolder()), newName);
}
@Authenticated
@@ -311,7 +313,7 @@
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
try {
- accessService.accessToContent(parseId(token.getDocument()), user, AccessRol.Editor);
+ accessService.accessToContent(ContentUtils.parseId(token.getDocument()), user, AccessRol.Editor);
} catch (final NoResultException e) {
throw new AccessViolationException();
}
@@ -324,7 +326,7 @@
public Integer save(final String userHash, final StateToken token, final String textContent)
throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final Content content = accessService.accessToContent(contentId, user, AccessRol.Editor);
@@ -336,7 +338,7 @@
@Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
public ContentDTO setAsDefaultContent(final String userHash, final StateToken token) {
- final Content content = contentManager.find(parseId(token.getDocument()));
+ final Content content = contentManager.find(ContentUtils.parseId(token.getDocument()));
groupManager.setDefaultContent(token.getGroup(), content);
return mapper.map(content, ContentDTO.class);
}
@@ -346,7 +348,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public I18nLanguageDTO setLanguage(final String userHash, final StateToken token, final String languageCode)
throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
return mapper.map(contentManager.setLanguage(user, contentId, languageCode), I18nLanguageDTO.class);
@@ -357,7 +359,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public void setPublishedOn(final String userHash, final StateToken token, final Date publishedOn)
throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
contentManager.setPublishedOn(user, contentId, publishedOn);
@@ -370,14 +372,14 @@
if (status.equals(ContentStatusDTO.publishedOnline) || status.equals(ContentStatusDTO.rejected)) {
throw new AccessViolationException();
}
- contentManager.setStatus(parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
+ contentManager.setStatus(ContentUtils.parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
}
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Administrator)
@Transactional(type = TransactionType.READ_WRITE)
public void setStatusAsAdmin(final String userHash, final StateToken token, final ContentStatusDTO status) {
- contentManager.setStatus(parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
+ contentManager.setStatus(ContentUtils.parseId(token.getDocument()), ContentStatus.valueOf(status.toString()));
}
@Authenticated
@@ -385,7 +387,7 @@
@Transactional(type = TransactionType.READ_WRITE)
public List<TagResultDTO> setTags(final String userHash, final StateToken token, final String tags)
throws DefaultException {
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
final Group group = groupManager.findByShortName(token.getGroup());
@@ -400,14 +402,14 @@
final boolean votePositive) throws DefaultException {
final UserSession userSession = getUserSession();
final User voter = userSession.getUser();
- final Long contentId = parseId(token.getDocument());
+ final Long contentId = ContentUtils.parseId(token.getDocument());
final Comment comment = commentManager.vote(voter, contentId, commentId, votePositive);
return mapper.map(comment, CommentDTO.class);
}
private void completeState(final User user, final boolean userIsLoggedIn, final Group group, final State state) {
if (state.isRateable()) {
- final Long contentId = parseId(state.getDocumentId());
+ final Long contentId = ContentUtils.parseId(state.getDocumentId());
final Content content = contentManager.find(contentId);
if (userIsLoggedIn) {
state.setCurrentUserRate(contentManager.getRateContent(user, content));
@@ -462,17 +464,9 @@
return stateDTO;
}
- private Long parseId(final String id) throws ContentNotFoundException {
- try {
- return new Long(id);
- } catch (final NumberFormatException e) {
- throw new ContentNotFoundException();
- }
- }
-
private String renameContent(final String documentId, final String newName) throws ContentNotFoundException,
DefaultException {
- final Long contentId = parseId(documentId);
+ final Long contentId = ContentUtils.parseId(documentId);
final UserSession userSession = getUserSession();
final User user = userSession.getUser();
return contentManager.renameContent(user, contentId, newName);
Modified: trunk/src/main/resources/db/liquibase_changelog.xml
===================================================================
--- trunk/src/main/resources/db/liquibase_changelog.xml 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/main/resources/db/liquibase_changelog.xml 2008-09-26 14:56:55 UTC (rev 886)
@@ -1,8 +1,8 @@
<databaseChangeLog
- xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.4"
+ xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.7"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.4
- http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.4.xsd">
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.7
+ http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.7.xsd">
<preConditions>
<!-- only execute this if the database exists (see DtabaInitializer.java -->
<sqlCheck expectedResult="1">
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -45,6 +45,8 @@
private License defLicense;
public ContentManagerTest() {
+ // Testing with mysql because utf-8 normally fails with mysql and not in
+ // memory
super("test_db", "kune.properties");
}
@@ -86,6 +88,10 @@
createContentWithMime(mimetype);
}
+ /**
+ * This normally fails with mysql (not configured for utf-8), see the
+ * INSTALL mysql section
+ */
@Test
public void testUTF8Persist() {
final Container container = Mockito.mock(Container.class);
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -33,11 +33,11 @@
@Test(expected = SessionExpiredException.class)
public void testSessionExp() throws Exception {
- fileUploadManager.createFile("otherhash", null, null, null);
+ fileUploadManager.createUploadedFile("otherhash", null, null, null);
}
@Test(expected = UserMustBeLoggedException.class)
public void testUserMustBeAuth() throws Exception {
- fileUploadManager.createFile(null, null, null, null);
+ fileUploadManager.createUploadedFile(null, null, null, null);
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-26 01:40:25 UTC (rev 885)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-26 14:56:55 UTC (rev 886)
@@ -20,6 +20,36 @@
}
@Test
+ public void getExtensionBasic() {
+ assertEquals("someext", FileUtils.getFileNameExtension("file.name.with.someext", false));
+ }
+
+ @Test
+ public void getExtensionWithDot() {
+ assertEquals("", FileUtils.getFileNameExtension("file name with no ext.", false));
+ }
+
+ @Test
+ public void getExtensionWithDotBasic() {
+ assertEquals(".someext", FileUtils.getFileNameExtension("file.name.with.someext", true));
+ }
+
+ @Test
+ public void getExtensionWithDotWithFinalDot() {
+ assertEquals("", FileUtils.getFileNameExtension("file name with no ext.", true));
+ }
+
+ @Test
+ public void getExtensionWithDotWithInitialDot() {
+ assertEquals("", FileUtils.getFileNameExtension(".file name with no ext", true));
+ }
+
+ @Test
+ public void getExtensionWithInitialDot() {
+ assertEquals("", FileUtils.getFileNameExtension(".file name with no ext", false));
+ }
+
+ @Test
public void testFileNameWExtensionSimple() {
assertEquals("test", FileUtils.getFileNameWithoutExtension("test.txt", "txt"));
}
1
0
Author: vjrj
Date: 2008-09-26 03:40:25 +0200 (Fri, 26 Sep 2008)
New Revision: 885
Added:
trunk/img/nav-icons/folder.png
trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/folder.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_excel.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_pps.png
trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_word.png
trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java
trunk/src/test/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistryTest.java
trunk/src/test/java/org/ourproject/kune/platf/client/dto/
trunk/src/test/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTOTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java
Modified:
trunk/INSTALL
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java
trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitleView.java
trunk/src/main/resources/META-INF/persistence.xml
trunk/src/main/resources/dozerBeanMapping.xml
trunk/src/test/java/org/ourproject/kune/platf/server/manager/GroupManagerTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java
Log:
Incomplete - task 70: File uploaded client content part
Complete - task 71: Content Icon in EntityTitle
Server upload utf8 in names issue, mime-type of files support and registry of icons in client. UTF8 persist problems fixed.
Modified: trunk/INSTALL
===================================================================
--- trunk/INSTALL 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/INSTALL 2008-09-26 01:40:25 UTC (rev 885)
@@ -16,8 +16,10 @@
(if you're using windows as dev plaftorm... you will have to write your own script ;). the idea is to
copy everything from target/kune-0.0.VERSIONHERE/org.ourproject.kune.app.Kune to src/main/webapp/gwt/org.ourproject.kune.app.Kune)
-- Make two databases in your mysql:
+- MYSQL configuration:
+Make two databases in your mysql:
+
CREATE DATABASE kune_dev;
GRANT ALL PRIVILEGES ON kune_dev.* TO kune@localhost IDENTIFIED BY 'db4kune';
FLUSH PRIVILEGES;
@@ -26,6 +28,15 @@
GRANT ALL PRIVILEGES ON kune_test.* TO kune@localhost IDENTIFIED BY 'db4kune';
FLUSH PRIVILEGES;
+You have to configure mysql to support UTF8 by editing your c:\Windows\my.ini or /etc/my.cnf (on Unix) file:
+[mysqld]
+default-character-set=utf8
+
+Or do it per table:
+
+ALTER DATABASE kune_dev CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci;
+ALTER DATABASE kune_test CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci;
+
- Configure upload directory:
sudo mkdir -p /var/lib/kune/uploads/
Added: trunk/img/nav-icons/folder.png
===================================================================
(Binary files differ)
Property changes on: trunk/img/nav-icons/folder.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -24,6 +24,7 @@
import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.tool.AbstractClientTool;
import org.ourproject.kune.platf.client.tool.ToolSelector;
@@ -61,7 +62,7 @@
this.dragDropContentRegistry = dragDropContentRegistry;
this.contentIconsRegistry = contentIconsRegistry;
registerDragDropTypes();
- registerImageTypes();
+ registerIcons();
}
public String getName() {
@@ -88,13 +89,32 @@
dragDropContentRegistry.registerDroppableType(TYPE_GALLERY);
}
- private void registerImageTypes() {
+ private void registerIcons() {
+ contentIconsRegistry.registerContentTypeIcon(TYPE_FOLDER, "images/nav/folder.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_BLOG, "images/nav/blog.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_GALLERY, "images/nav/gallery.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_DOCUMENT, "images/nav/page.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_POST, "images/nav/post.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_WIKI, "images/nav/wiki.png");
contentIconsRegistry.registerContentTypeIcon(TYPE_WIKIPAGE, "images/nav/wikipage.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("image"),
+ "images/nav/picture.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("video"),
+ "images/nav/film.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("application", "pdf"),
+ "images/nav/page_pdf.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("application", "zip"),
+ "images/nav/page_zip.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("application", "zip"),
+ "images/nav/page_zip.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("text"),
+ "images/nav/page_text.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("application", "msword"),
+ "images/nav/page_word.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("application", "excel"),
+ "images/nav/page_excel.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, new BasicMimeTypeDTO("application",
+ "mspowerpoint"), "images/nav/page_pps.png");
+ contentIconsRegistry.registerContentTypeIcon(TYPE_UPLOADEDFILE, "images/nav/page.png");
}
-
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistry.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -2,6 +2,8 @@
import java.util.HashMap;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
+
public class ContentIconsRegistry {
private final HashMap<String, String> contentTypesIcons;
@@ -14,7 +16,44 @@
return icon == null ? "" : icon;
}
+ /**
+ * If there is a specific icon for a type/subtype pair or a generic type
+ * icon in defect
+ *
+ * @param typeId
+ * the kune typeId (see *ClientTool)
+ * @param mimeType
+ * @return
+ */
+ public String getContentTypeIcon(final String typeId, final BasicMimeTypeDTO mimeType) {
+ String icon = getContentTypeIcon(concatenate(typeId, mimeType));
+ if (icon.equals("")) {
+ if (mimeType == null) {
+ return getContentTypeIcon(typeId);
+ }
+ } else {
+ return icon;
+ }
+ final String subtype = mimeType.getSubtype();
+ if (subtype != null && subtype.length() > 0) {
+ icon = getContentTypeIcon(typeId, new BasicMimeTypeDTO(mimeType.getType()));
+ }
+ return icon.equals("") ? getContentTypeIcon(typeId) : icon;
+ }
+
+ public void registerContentTypeIcon(final String typeId, final BasicMimeTypeDTO mimeType, final String iconUrl) {
+ registerContentTypeIcon(concatenate(typeId, mimeType), iconUrl);
+ }
+
public void registerContentTypeIcon(final String contentTypeId, final String iconUrl) {
contentTypesIcons.put(contentTypeId, iconUrl);
}
+
+ private String concatenate(final String typeId, final BasicMimeTypeDTO mimeType) {
+ if (mimeType != null) {
+ return typeId + "|" + mimeType;
+ } else {
+ return typeId;
+ }
+ }
}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTO.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -0,0 +1,49 @@
+package org.ourproject.kune.platf.client.dto;
+
+import com.google.gwt.user.client.rpc.IsSerializable;
+
+public class BasicMimeTypeDTO implements IsSerializable {
+
+ private String type;
+ private String subtype;
+
+ public BasicMimeTypeDTO() {
+ this(null, null);
+ }
+
+ public BasicMimeTypeDTO(final String mimetype) {
+ if (mimetype != null) {
+ final String[] split = mimetype.split("/", 2);
+ type = split[0];
+ if (split.length > 1 && split[1].length() > 0) {
+ subtype = split[1];
+ }
+ }
+ }
+
+ public BasicMimeTypeDTO(final String type, final String subtype) {
+ this.type = type;
+ this.subtype = subtype;
+ }
+
+ public String getSubtype() {
+ return subtype;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setSubtype(final String subtype) {
+ this.subtype = subtype;
+ }
+
+ public void setType(final String type) {
+ this.type = type;
+ }
+
+ public String toString() {
+ return subtype == null ? type : type + "/" + subtype;
+ }
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -20,6 +20,7 @@
package org.ourproject.kune.platf.client.dto;
+
import com.google.gwt.user.client.rpc.IsSerializable;
public class ContentDTO implements IsSerializable {
@@ -30,13 +31,13 @@
private StateToken stateToken;
private ContentStatusDTO status;
private AccessRightsDTO rights;
- private String mimeType;
+ private BasicMimeTypeDTO mimeType;
public Long getId() {
return id;
}
- public String getMimeType() {
+ public BasicMimeTypeDTO getMimeType() {
return mimeType;
}
@@ -64,7 +65,7 @@
this.id = id;
}
- public void setMimeType(final String mimeType) {
+ public void setMimeType(final BasicMimeTypeDTO mimeType) {
this.mimeType = mimeType;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/StateDTO.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -23,6 +23,7 @@
import java.util.Date;
import java.util.List;
+
import com.google.gwt.user.client.rpc.IsSerializable;
public class StateDTO implements IsSerializable {
@@ -45,6 +46,7 @@
private Integer rateByUsers;
private Double currentUserRate;
private String typeId;
+ private BasicMimeTypeDTO mimeType;
private LicenseDTO license;
private I18nLanguageDTO language;
private Date publishedOn;
@@ -77,6 +79,10 @@
return container;
}
+ public AccessRightsDTO getContainerRights() {
+ return containerRights;
+ }
+
public String getContent() {
return content;
}
@@ -93,10 +99,6 @@
return documentId;
}
- public AccessRightsDTO getContainerRights() {
- return containerRights;
- }
-
public GroupDTO getGroup() {
return this.group;
}
@@ -121,6 +123,10 @@
return license;
}
+ public BasicMimeTypeDTO getMimeType() {
+ return mimeType;
+ }
+
public ParticipationDataDTO getParticipation() {
return participation;
}
@@ -238,6 +244,10 @@
this.license = license;
}
+ public void setMimeType(final BasicMimeTypeDTO mimeType) {
+ this.mimeType = mimeType;
+ }
+
public void setParticipation(final ParticipationDataDTO participation) {
this.participation = participation;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -1,5 +1,6 @@
package org.ourproject.kune.platf.client.services;
+import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
import org.ourproject.kune.platf.client.app.ApplicationComponentGroup;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.rpc.GroupServiceAsync;
@@ -231,7 +232,7 @@
public EntityTitle create() {
final EntityTitlePresenter presenter = new EntityTitlePresenter($(I18nUITranslationService.class),
$(KuneErrorHandler.class), $(StateManager.class), $(Session.class),
- $$(ContentServiceAsync.class), $$(ContextNavigator.class));
+ $$(ContentServiceAsync.class), $$(ContextNavigator.class), $(ContentIconsRegistry.class));
final EntityTitlePanel panel = new EntityTitlePanel($(WorkspaceSkeleton.class), presenter);
presenter.init(panel);
return presenter;
@@ -259,21 +260,21 @@
}
});
- register(ApplicationComponentGroup.class, new Factory<RatePresenter>(RatePresenter.class) {
- public RatePresenter create() {
- final RatePresenter presenter = new RatePresenter($(StateManager.class));
- final RatePanel panel = new RatePanel(null, null, $(I18nUITranslationService.class),
+ register(ApplicationComponentGroup.class, new Factory<RateIt>(RateIt.class) {
+ public RateIt create() {
+ final RateItPresenter presenter = new RateItPresenter($(I18nUITranslationService.class),
+ $(Session.class), $$(ContentServiceAsync.class), $(StateManager.class));
+ final RateItPanel panel = new RateItPanel(presenter, $(I18nUITranslationService.class),
$(WorkspaceSkeleton.class));
presenter.init(panel);
return presenter;
}
});
- register(ApplicationComponentGroup.class, new Factory<RateIt>(RateIt.class) {
- public RateIt create() {
- final RateItPresenter presenter = new RateItPresenter($(I18nUITranslationService.class),
- $(Session.class), $$(ContentServiceAsync.class), $(StateManager.class));
- final RateItPanel panel = new RateItPanel(presenter, $(I18nUITranslationService.class),
+ register(ApplicationComponentGroup.class, new Factory<RatePresenter>(RatePresenter.class) {
+ public RatePresenter create() {
+ final RatePresenter presenter = new RatePresenter($(StateManager.class));
+ final RatePanel panel = new RatePanel(null, null, $(I18nUITranslationService.class),
$(WorkspaceSkeleton.class));
presenter.init(panel);
return presenter;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -110,10 +110,13 @@
private void createDialog(final boolean show) {
dialog = new UploadDialog(i18n.t("File uploader"), false, true);
dialog.setId(SITE_FILE_UPLOADER);
- // dialog.setUploadAutostart(true);
+ dialog.setAllowCloseOnUpload(true);
dialog.setResetOnHide(false);
- dialog.setAllowCloseOnUpload(true);
+ dialog.setClosable(true);
dialog.setCloseAction(Window.HIDE);
+ dialog.setMinimizable(true);
+ dialog.setUploadAutostart(true);
+ // Here fails
dialog.addListener(new UploadDialogListenerAdapter() {
@Override
@@ -126,6 +129,11 @@
}
@Override
+ public void onMinimize(final Window source) {
+ dialog.hide();
+ }
+
+ @Override
public void onUploadComplete(final UploadDialog source) {
if (!dialog.isVisible()) {
Site.info(i18n.t("Upload completed"));
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/folder.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/folder.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_excel.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_excel.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_pps.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_pps.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_word.png
===================================================================
(Binary files differ)
Property changes on: trunk/src/main/java/org/ourproject/kune/platf/public/images/nav/page_word.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/BasicMimeType.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -0,0 +1,50 @@
+package org.ourproject.kune.platf.server.domain;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+public class BasicMimeType {
+
+ private String type;
+ private String subtype;
+
+ public BasicMimeType() {
+ this(null, null);
+ }
+
+ public BasicMimeType(final String mimetype) {
+ if (mimetype != null) {
+ final String[] split = mimetype.split("/", 2);
+ type = split[0];
+ if (split.length > 1 && split[1].length() > 0) {
+ subtype = split[1];
+ }
+ }
+ }
+
+ public BasicMimeType(final String type, final String subtype) {
+ this.type = type;
+ this.subtype = subtype;
+ }
+
+ public String getSubtype() {
+ return subtype;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setSubtype(final String subtype) {
+ this.subtype = subtype;
+ }
+
+ public void setType(final String type) {
+ this.type = type;
+ }
+
+ public String toString() {
+ return subtype == null ? type : type + "/" + subtype;
+ }
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -30,6 +30,7 @@
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
+import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@@ -118,7 +119,8 @@
@Column(nullable = false)
private ContentStatus status;
- private String mimeType;
+ @Embedded
+ private BasicMimeType mimeType;
public Content() {
translations = new ArrayList<ContentTranslation>();
@@ -193,7 +195,7 @@
return license;
}
- public String getMimeType() {
+ public BasicMimeType getMimeType() {
return mimeType;
}
@@ -299,7 +301,7 @@
this.license = license;
}
- public void setMimeType(final String mimeType) {
+ public void setMimeType(final BasicMimeType mimeType) {
this.mimeType = mimeType;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -3,7 +3,9 @@
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
import java.io.Writer;
+import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
@@ -12,7 +14,10 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import net.sf.jmimemagic.MagicException;
import net.sf.jmimemagic.MagicMatch;
+import net.sf.jmimemagic.MagicMatchNotFoundException;
+import net.sf.jmimemagic.MagicParseException;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
@@ -32,6 +37,7 @@
import org.ourproject.kune.platf.server.auth.Authenticated;
import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.domain.BasicMimeType;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
import org.ourproject.kune.platf.server.domain.User;
@@ -48,6 +54,10 @@
public static final Log log = LogFactory.getLog(FileUploadManager.class);
+ private static final String SLASH = File.separator;
+
+ private static final String UTF8 = "UTF-8";
+
private static final long serialVersionUID = 1L;
@Inject
@@ -111,12 +121,10 @@
createFile(userHash, stateToken, fileName, file);
} catch (final FileUploadException e) {
jsonResponse = createJsonResponse(false, i18n.t("Error: File too large"));
-
} catch (final Exception e) {
- // SessionExpiredException,
- // UserMustBeLoggedException
jsonResponse = createJsonResponse(false, i18n.t("Error uploading file"));
- log.info(e.getCause());
+ log.info("Exception: " + e.getCause());
+ e.printStackTrace();
}
final Writer w = new OutputStreamWriter(resp.getOutputStream());
@@ -128,28 +136,46 @@
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor, actionLevel = ActionLevel.container)
@Transactional(type = TransactionType.READ_WRITE)
- JSONObject createFile(final String userHash, final StateToken stateToken, final String fileName,
+ Content createFile(final String userHash, final StateToken stateToken, final String fileName,
final FileItem fileUploadItem) throws Exception {
- final String relDir = calculateUploadDirLocation(stateToken);
+ final String relDir = calculateUploadDirLocation(stateToken, false);
+ final String relDirEncoded = calculateUploadDirLocation(stateToken, true);
final String absDir = kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + relDir;
fileManager.mkdir(absDir);
- final File file = fileManager.createFileWithSequentialName(absDir, fileName);
+
+ final String filenameUTF8 = new String(fileName.getBytes(), UTF8);
+ final File file = fileManager.createFileWithSequentialName(absDir, filenameUTF8);
fileUploadItem.write(file);
- final MagicMatch magic = fileManager.getMimeType(file);
+ // FIXME remove file if not success
+ String mimetype = "unknown/unknown";
+ String extension = "";
+ try {
+ final MagicMatch magicMatch = fileManager.getMimeType(file);
+ extension = magicMatch.getExtension();
+ mimetype = magicMatch.getMimeType();
+ } catch (final MagicParseException e) {
+ log.info("Exception: " + e.getCause());
+ } catch (final MagicMatchNotFoundException e) {
+ log.info("Exception: " + e.getCause());
+ } catch (final MagicException e) {
+ log.info("Exception: " + e.getCause());
+ }
// Persist
final User user = userSession.getUser();
final Container container = accessService.accessToContainer(new Long(stateToken.getFolder()), user,
AccessRol.Editor);
final Content content = contentManager.createContent(FileUtils.getFileNameWithoutExtension(file.getName(),
- magic.getExtension()), relDir + File.separator + file.getName(), user, container);
+ extension), relDirEncoded + SLASH + URLEncoder.encode(filenameUTF8, UTF8), user, container);
content.setTypeId(DocumentServerTool.TYPE_UPLOADEDFILE);
- content.setMimeType(magic.getMimeType());
- return createSuccessResponse();
+ content.setMimeType(new BasicMimeType(mimetype));
+ return content;
}
- private String calculateUploadDirLocation(final StateToken stateToken) {
- return File.separator + stateToken.getGroup() + File.separator + stateToken.getTool() + File.separator
+ private String calculateUploadDirLocation(final StateToken stateToken, final boolean urlEncoded)
+ throws UnsupportedEncodingException {
+ final String group = stateToken.getGroup();
+ return SLASH + (urlEncoded ? URLEncoder.encode(group, UTF8) : group) + SLASH + stateToken.getTool() + SLASH
+ stateToken.getFolder();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/state/State.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -27,6 +27,7 @@
import org.ourproject.kune.platf.server.ParticipationData;
import org.ourproject.kune.platf.server.access.AccessRights;
import org.ourproject.kune.platf.server.domain.AccessLists;
+import org.ourproject.kune.platf.server.domain.BasicMimeType;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.ContentStatus;
import org.ourproject.kune.platf.server.domain.Group;
@@ -54,6 +55,7 @@
private Integer rateByUsers;
private Double currentUserRate;
private String typeId;
+ private BasicMimeType mimeType;
private License license;
private I18nLanguage language;
private List<User> authors;
@@ -123,6 +125,10 @@
return license;
}
+ public BasicMimeType getMimeType() {
+ return mimeType;
+ }
+
public ParticipationData getParticipation() {
return participation;
}
@@ -231,6 +237,10 @@
this.license = license;
}
+ public void setMimeType(final BasicMimeType mimeType) {
+ this.mimeType = mimeType;
+ }
+
public void setParticipation(final ParticipationData participation) {
this.participation = participation;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/state/StateServiceDefault.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -39,6 +39,7 @@
final Long documentId = content.getId();
if (documentId != null) {
state.setTypeId(content.getTypeId());
+ state.setMimeType(content.getMimeType());
state.setDocumentId(documentId.toString());
state.setIsRateable(true);
state.setLanguage(content.getLanguage());
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -30,6 +30,7 @@
import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
import org.ourproject.kune.platf.client.dto.AccessRightsDTO;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
import org.ourproject.kune.platf.client.dto.ContainerDTO;
import org.ourproject.kune.platf.client.dto.ContainerSimpleDTO;
import org.ourproject.kune.platf.client.dto.ContentDTO;
@@ -204,11 +205,11 @@
// Process our current content/container
if (state.hasDocument()) {
rights = state.getContentRights();
- addItem(state.getTitle(), state.getTypeId(), state.getStatus(), stateToken, container.getStateToken(),
- rights, false);
+ addItem(state.getTitle(), state.getTypeId(), state.getMimeType(), state.getStatus(), stateToken, container
+ .getStateToken(), rights, false);
} else {
rights = containerRights;
- addItem(container.getName(), container.getTypeId(), ContentStatusDTO.publishedOnline, container
+ addItem(container.getName(), container.getTypeId(), null, ContentStatusDTO.publishedOnline, container
.getStateToken(), container.getStateToken().clone().setFolder(container.getParentFolderId()),
containerRights, false);
}
@@ -236,31 +237,32 @@
actionsByItem.clear();
}
- private void addItem(final String title, final String contentTypeId, final ContentStatusDTO status,
- final StateToken stateToken, final StateToken parentStateToken, final AccessRightsDTO rights,
- final boolean isNodeSelected) {
+ private void addItem(final String title, final String contentTypeId, final BasicMimeTypeDTO mimeType,
+ final ContentStatusDTO status, final StateToken stateToken, final StateToken parentStateToken,
+ final AccessRightsDTO rights, final boolean isNodeSelected) {
final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(rights, contentTypeId);
toolbar.showActions(set.getToolbarActions(), isNodeSelected);
+ final String contentTypeIcon = contentIconsRegistry.getContentTypeIcon(contentTypeId, mimeType);
final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken),
- contentIconsRegistry.getContentTypeIcon(contentTypeId), title, status, stateToken,
- dragDropContentRegistry.isDraggable(contentTypeId, rights.isAdministrable()), dragDropContentRegistry
- .isDroppable(contentTypeId, rights.isAdministrable()), set.getItemActions());
+ contentTypeIcon, title, status, stateToken, dragDropContentRegistry.isDraggable(contentTypeId, rights
+ .isAdministrable()), dragDropContentRegistry.isDroppable(contentTypeId, rights
+ .isAdministrable()), set.getItemActions());
view.addItem(item);
actionsByItem.put(stateToken, set.getToolbarActions());
}
private void createChildItems(final ContainerDTO container, final AccessRightsDTO containerRights) {
for (final ContentDTO content : container.getContents()) {
- addItem(content.getTitle(), content.getTypeId(), content.getStatus(), content.getStateToken(), content
- .getStateToken().clone().clearDocument(), content.getRights(), false);
+ addItem(content.getTitle(), content.getTypeId(), content.getMimeType(), content.getStatus(), content
+ .getStateToken(), content.getStateToken().clone().clearDocument(), content.getRights(), false);
}
for (final ContainerSimpleDTO siblingFolder : container.getChilds()) {
- addItem(siblingFolder.getName(), siblingFolder.getTypeId(), ContentStatusDTO.publishedOnline, siblingFolder
- .getStateToken(), siblingFolder.getStateToken().clone()
- .setFolder(siblingFolder.getParentFolderId()), containerRights, false);
+ addItem(siblingFolder.getName(), siblingFolder.getTypeId(), null, ContentStatusDTO.publishedOnline,
+ siblingFolder.getStateToken(), siblingFolder.getStateToken().clone().setFolder(
+ siblingFolder.getParentFolderId()), containerRights, false);
}
}
@@ -272,7 +274,7 @@
final StateToken parentStateToken = state.clone().clearDocument().setFolder(folder.getParentFolderId());
if (folder.getParentFolderId() != null) {
- addItem(folder.getName(), folder.getTypeId(), ContentStatusDTO.publishedOnline, folderStateToken,
+ addItem(folder.getName(), folder.getTypeId(), null, ContentStatusDTO.publishedOnline, folderStateToken,
parentStateToken, rights, false);
} else {
// Root must be already created
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePanel.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -25,13 +25,16 @@
import org.ourproject.kune.workspace.client.skel.TitleBar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
public class EntityTitlePanel implements EntityTitleView {
private final EditableIconLabel titleLabel;
private final Label dateLabel;
+ private final Image icon;
public EntityTitlePanel(final WorkspaceSkeleton ws, final EntityTitlePresenter presenter) {
+ icon = new Image();
titleLabel = new EditableIconLabel(new EditableClickListener() {
public void onEdited(final String text) {
presenter.onTitleRename(text);
@@ -40,13 +43,17 @@
dateLabel = new Label();
final TitleBar wsTitle = ws.getEntityWorkspace().getTitle();
+ wsTitle.add(icon);
wsTitle.add(titleLabel);
wsTitle.addFill();
wsTitle.add(dateLabel);
- titleLabel.addStyleName("kune-Margin-Large-l");
+ icon.addStyleName("kune-Margin-Large-l");
+ titleLabel.addStyleName("kune-Margin-Medium-l");
titleLabel.addStyleName("kune-ft17px");
+ titleLabel.ensureDebugId("k-entity-title-title");
dateLabel.addStyleName("kune-Margin-Large-r");
dateLabel.addStyleName("kune-ft12px");
+ dateLabel.ensureDebugId("k-entity-title-date");
}
public void restoreOldTitle() {
@@ -57,6 +64,21 @@
dateLabel.setText(date);
}
+ public void setContentIcon(final String iconUrl) {
+ icon.setUrl(iconUrl);
+ }
+
+ public void setContentIconVisible(final boolean visible) {
+ icon.setVisible(visible);
+ if (visible) {
+ titleLabel.removeStyleName("kune-Margin-Large-l");
+ titleLabel.addStyleName("kune-Margin-Medium-l");
+ } else {
+ titleLabel.removeStyleName("kune-Margin-Medium-l");
+ titleLabel.addStyleName("kune-Margin-Large-l");
+ }
+ }
+
public void setContentTitle(final String title) {
titleLabel.setText(title);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -23,6 +23,7 @@
import java.util.Date;
import org.ourproject.kune.platf.client.View;
+import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
@@ -46,16 +47,18 @@
private final Provider<ContentServiceAsync> contentServiceProvider;
private final Session session;
private final Provider<ContextNavigator> contextNavigatorProvider;
+ private final ContentIconsRegistry iconsRegistry;
public EntityTitlePresenter(final I18nTranslationService i18n, final KuneErrorHandler errorHandler,
final StateManager stateManager, final Session session,
final Provider<ContentServiceAsync> contentServiceProvider,
- final Provider<ContextNavigator> contextNavigatorProvider) {
+ final Provider<ContextNavigator> contextNavigatorProvider, final ContentIconsRegistry iconsRegistry) {
this.i18n = i18n;
this.errorHandler = errorHandler;
this.session = session;
this.contentServiceProvider = contentServiceProvider;
this.contextNavigatorProvider = contextNavigatorProvider;
+ this.iconsRegistry = iconsRegistry;
stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
@@ -130,6 +133,13 @@
}
setContentDateVisible(false);
}
+ final String contentTypeIcon = iconsRegistry.getContentTypeIcon(state.getTypeId(), state.getMimeType());
+ if (contentTypeIcon.length() > 0) {
+ view.setContentIcon(contentTypeIcon);
+ view.setContentIconVisible(true);
+ } else {
+ view.setContentIconVisible(false);
+ }
}
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitleView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitleView.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitleView.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -28,6 +28,10 @@
void setContentDate(String date);
+ void setContentIcon(String iconUrl);
+
+ void setContentIconVisible(boolean visible);
+
void setContentTitle(String title);
void setContentTitleEditable(boolean editable);
Modified: trunk/src/main/resources/META-INF/persistence.xml
===================================================================
--- trunk/src/main/resources/META-INF/persistence.xml 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/resources/META-INF/persistence.xml 2008-09-26 01:40:25 UTC (rev 885)
@@ -18,7 +18,7 @@
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
- value="jdbc:mysql://localhost/kune_dev?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8" />
+ value="jdbc:mysql://localhost/kune_dev?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8" />
<property name="hibernate.connection.username" value="kune" />
<property name="hibernate.connection.password" value="db4kune" />
<property name="hibernate.hbm2ddl.auto" value="update" />
@@ -47,7 +47,7 @@
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
- value="jdbc:mysql://localhost/kune_test?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8" />
+ value="jdbc:mysql://localhost/kune_test?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8" />
<property name="hibernate.connection.username" value="kune" />
<property name="hibernate.connection.password" value="db4kune" />
<property name="hibernate.hbm2ddl.auto" value="create" />
Modified: trunk/src/main/resources/dozerBeanMapping.xml
===================================================================
--- trunk/src/main/resources/dozerBeanMapping.xml 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/main/resources/dozerBeanMapping.xml 2008-09-26 01:40:25 UTC (rev 885)
@@ -2,330 +2,439 @@
<!DOCTYPE mappings PUBLIC "-//DOZER//DTD MAPPINGS//EN"
"http://dozer.sourceforge.net/dtd/dozerbeanmapping.dtd">
<mappings>
- <configuration>
- <stop-on-errors>true</stop-on-errors>
- <date-format>dd/mm/yyyy</date-format>
- <wildcard>true</wildcard>
- </configuration>
+ <configuration>
+ <stop-on-errors>true</stop-on-errors>
+ <date-format>dd/mm/yyyy</date-format>
+ <wildcard>true</wildcard>
+ </configuration>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.InitDataDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.InitData</class-b>
- <field>
- <a>licenses</a>
- <b>licenses</b>
- <a-hint>org.ourproject.kune.platf.client.dto.LicenseDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.License</b-hint>
- </field>
- <field>
- <a>languages</a>
- <b>languages</b>
- <a-hint>
- org.ourproject.kune.platf.client.dto.I18nLanguageSimpleDTO
- </a-hint>
- <b-hint>
- org.ourproject.kune.platf.server.domain.I18nLanguage
- </b-hint>
- </field>
- <field>
- <a>countries</a>
- <b>countries</b>
- <a-hint>
- org.ourproject.kune.platf.client.dto.I18nCountryDTO
- </a-hint>
- <b-hint>
- org.ourproject.kune.platf.server.domain.I18nCountry
- </b-hint>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.InitDataDTO
+ </class-a>
+ <class-b>org.ourproject.kune.platf.server.InitData</class-b>
+ <field>
+ <a>licenses</a>
+ <b>licenses</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.LicenseDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.License
+ </b-hint>
+ </field>
+ <field>
+ <a>languages</a>
+ <b>languages</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.I18nLanguageSimpleDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.I18nLanguage
+ </b-hint>
+ </field>
+ <field>
+ <a>countries</a>
+ <b>countries</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.I18nCountryDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.I18nCountry
+ </b-hint>
+ </field>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.GroupDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.Group</class-b>
- </mapping>
+ <mapping>
+ <class-a>org.ourproject.kune.platf.client.dto.GroupDTO</class-a>
+ <class-b>org.ourproject.kune.platf.server.domain.Group</class-b>
+ </mapping>
+
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.GroupListDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.GroupList
+ </class-b>
+ <field>
+ <a>list</a>
+ <b>list</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.GroupDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.Group
+ </b-hint>
+ </field>
+ <field
+ custom-converter="org.ourproject.kune.platf.server.mapper.GroupListModeConverter">
+ <a>mode</a>
+ <b>mode</b>
+ </field>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.GroupListDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.GroupList</class-b>
- <field>
- <a>list</a>
- <b>list</b>
- <a-hint>org.ourproject.kune.platf.client.dto.GroupDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.Group</b-hint>
- </field>
- <field
- custom-converter="org.ourproject.kune.platf.server.mapper.GroupListModeConverter">
- <a>mode</a>
- <b>mode</b>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.AccessListsDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.AccessLists
+ </class-b>
+ <field>
+ <a>admins</a>
+ <b>admins</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.GroupListDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.GroupList
+ </b-hint>
+ </field>
+ <field>
+ <a>editors</a>
+ <b>editors</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.GroupListDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.GroupList
+ </b-hint>
+ </field>
+ <field>
+ <a>viewers</a>
+ <b>viewers</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.GroupListDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.GroupList
+ </b-hint>
+ </field>
+ </mapping>
- <mapping>
- <class-a>
- org.ourproject.kune.platf.client.dto.AccessListsDTO
- </class-a>
- <class-b>
- org.ourproject.kune.platf.server.domain.AccessLists
- </class-b>
- <field>
- <a>admins</a>
- <b>admins</b>
- <a-hint>org.ourproject.kune.platf.client.dto.GroupListDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.GroupList</b-hint>
- </field>
- <field>
- <a>editors</a>
- <b>editors</b>
- <a-hint>org.ourproject.kune.platf.client.dto.GroupListDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.GroupList</b-hint>
- </field>
- <field>
- <a>viewers</a>
- <b>viewers</b>
- <a-hint>org.ourproject.kune.platf.client.dto.GroupListDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.GroupList</b-hint>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.AccessRightsDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.access.AccessRights
+ </class-b>
+ </mapping>
- <mapping>
- <class-a>
- org.ourproject.kune.platf.client.dto.AccessRightsDTO
- </class-a>
- <class-b>
- org.ourproject.kune.platf.server.access.AccessRights
- </class-b>
- </mapping>
+ <mapping>
+ <class-a>org.ourproject.kune.platf.client.dto.StateDTO</class-a>
+ <class-b>org.ourproject.kune.platf.server.state.State</class-b>
+ <field>
+ <a>authors</a>
+ <b>authors</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.UserSimpleDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.User
+ </b-hint>
+ </field>
+ <field>
+ <a>groupTags</a>
+ <b>groupTags</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.TagResultDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.TagResult
+ </b-hint>
+ </field>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.StateDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.state.State</class-b>
- <field>
- <a>authors</a>
- <b>authors</b>
- <a-hint>
- org.ourproject.kune.platf.client.dto.UserSimpleDTO
- </a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.User</b-hint>
- </field>
- <field>
- <a>groupTags</a>
- <b>groupTags</b>
- <a-hint>org.ourproject.kune.platf.client.dto.TagResultDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.TagResult</b-hint>
- </field>
- </mapping>
-
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.StateToken</class-a>
- <class-b>org.ourproject.kune.platf.client.dto.StateToken</class-b>
- <field>
- <a>encoded</a>
- <b>encoded</b>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.StateToken
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.client.dto.StateToken
+ </class-b>
+ <field>
+ <a>encoded</a>
+ <b>encoded</b>
+ </field>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.LicenseDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.License</class-b>
- </mapping>
-
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.ContainerSimpleDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.Container</class-b>
- <field>
- <a get-method="getStateToken">stateToken</a>
- <b>stateToken</b>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.BasicMimeType
+ </class-b>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.ContentDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.Content</class-b>
- <field>
- <a>title</a>
- <b>lastRevision.title</b>
- </field>
- <field>
- <a get-method="getStateToken">stateToken</a>
- <b>stateToken</b>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.LicenseDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.License
+ </class-b>
+ </mapping>
- <mapping type="one-way">
- <class-a>org.ourproject.kune.platf.server.domain.Content</class-a>
- <class-b>org.ourproject.kune.platf.client.dto.LinkDTO</class-b>
- <field>
- <a>lastRevision.title</a>
- <b>longName</b>
- </field>
- <field>
- <a>container.owner.shortName</a>
- <b>shortName</b>
- </field>
- <field>
- <a get-method="getStateTokenEncoded">link</a>
- <b>link</b>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.ContainerSimpleDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.Container
+ </class-b>
+ <field>
+ <a get-method="getStateToken">stateToken</a>
+ <b>stateToken</b>
+ </field>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.ContainerDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.Container</class-b>
- <field>
- <a>contents</a>
- <b>contents</b>
- <a-hint>org.ourproject.kune.platf.client.dto.ContentDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.Content</b-hint>
- </field>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.ContentDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.Content
+ </class-b>
+ <field>
+ <a>title</a>
+ <b>lastRevision.title</b>
+ </field>
+ <field>
+ <a get-method="getStateToken">stateToken</a>
+ <b>stateToken</b>
+ </field>
+ </mapping>
- <field>
- <a>absolutePath</a>
- <b>absolutePath</b>
- <a-hint>
- org.ourproject.kune.platf.client.dto.ContainerSimpleDTO
- </a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.Container</b-hint>
- </field>
+ <mapping type="one-way">
+ <class-a>
+ org.ourproject.kune.platf.server.domain.Content
+ </class-a>
+ <class-b>org.ourproject.kune.platf.client.dto.LinkDTO</class-b>
+ <field>
+ <a>lastRevision.title</a>
+ <b>longName</b>
+ </field>
+ <field>
+ <a>container.owner.shortName</a>
+ <b>shortName</b>
+ </field>
+ <field>
+ <a get-method="getStateTokenEncoded">link</a>
+ <b>link</b>
+ </field>
+ </mapping>
- <field>
- <a>childs</a>
- <b>childs</b>
- <a-hint>org.ourproject.kune.platf.client.dto.ContainerSimpleDTO</a-hint>
- <b-hint>org.ourproject.kune.platf.server.domain.Container</b-hint>
- </field>
-
- <field>
- <a get-method="getStateToken">stateToken</a>
- <b>stateToken</b>
- </field>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.ContainerDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.Container
+ </class-b>
+ <field>
+ <a>contents</a>
+ <b>contents</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.ContentDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.Content
+ </b-hint>
+ </field>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.UserInfoDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.users.UserInfo</class-b>
- <field>
- <a>language</a>
- <b>language</b>
- <a-hint>
- org.ourproject.kune.platf.client.dto.I18nLanguageDTO
- </a-hint>
- <b-hint>
- org.ourproject.kune.platf.server.domain.I18nLanguage
- </b-hint>
- </field>
- <field>
- <a>country</a>
- <b>country</b>
- <a-hint>
- org.ourproject.kune.platf.client.dto.I18nCountryDTO
- </a-hint>
- <b-hint>
- org.ourproject.kune.platf.server.domain.I18nCountry
- </b-hint>
- </field>
- </mapping>
+ <field>
+ <a>absolutePath</a>
+ <b>absolutePath</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.ContainerSimpleDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.Container
+ </b-hint>
+ </field>
- <mapping>
- <class-a>
- org.ourproject.kune.platf.client.dto.ParticipationDataDTO
- </class-a>
- <class-b>
- org.ourproject.kune.platf.server.ParticipationData
- </class-b>
- </mapping>
+ <field>
+ <a>childs</a>
+ <b>childs</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.ContainerSimpleDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.Container
+ </b-hint>
+ </field>
- <mapping>
- <class-a>
- org.ourproject.kune.platf.client.dto.I18nLanguageDTO
- </class-a>
- <class-b>
- org.ourproject.kune.platf.server.domain.I18nLanguage
- </class-b>
- </mapping>
+ <field>
+ <a get-method="getStateToken">stateToken</a>
+ <b>stateToken</b>
+ </field>
+ </mapping>
- <mapping>
- <class-a>
- org.ourproject.kune.platf.client.dto.I18nCountryDTO
- </class-a>
- <class-b>
- org.ourproject.kune.platf.server.domain.I18nCountry
- </class-b>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.UserInfoDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.users.UserInfo
+ </class-b>
+ <field>
+ <a>language</a>
+ <b>language</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.I18nLanguageDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.I18nLanguage
+ </b-hint>
+ </field>
+ <field>
+ <a>country</a>
+ <b>country</b>
+ <a-hint>
+ org.ourproject.kune.platf.client.dto.I18nCountryDTO
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.server.domain.I18nCountry
+ </b-hint>
+ </field>
+ </mapping>
- <mapping>
- <class-a>
- org.ourproject.kune.platf.client.dto.UserSimpleDTO
- </class-a>
- <class-b>org.ourproject.kune.platf.server.domain.User</class-b>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.ParticipationDataDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.ParticipationData
+ </class-b>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.TagDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.Tag</class-b>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.I18nLanguageDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.I18nLanguage
+ </class-b>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.TagResultDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.TagResult</class-b>
- </mapping>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.I18nCountryDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.I18nCountry
+ </class-b>
+ </mapping>
- <mapping>
- <class-a>org.ourproject.kune.platf.server.domain.Comment</class-a>
- <class-b>org.ourproject.kune.platf.client.dto.CommentDTO</class-b>
- <field>
- <a>author</a>
- <b>author</b>
- <a-hint>org.ourproject.kune.platf.server.domain.User</a-hint>
- <b-hint>
- org.ourproject.kune.platf.client.dto.UserSimpleDTO
- </b-hint>
- </field>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.UserSimpleDTO
+ </class-a>
+ <class-b>org.ourproject.kune.platf.server.domain.User</class-b>
+ </mapping>
- <field>
- <a>childs</a>
- <b>childs</b>
- <a-hint>org.ourproject.kune.platf.server.domain.Comment</a-hint>
- <b-hint>org.ourproject.kune.platf.client.dto.CommentDTO</b-hint>
- </field>
+ <mapping>
+ <class-a>org.ourproject.kune.platf.client.dto.TagDTO</class-a>
+ <class-b>org.ourproject.kune.platf.server.domain.Tag</class-b>
+ </mapping>
- <field type="one-way">
- <a get-method="getPositiveVotersCount">positiveVotersCount</a>
- <b>positiveVotersCount</b>
- </field>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.TagResultDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.TagResult
+ </class-b>
+ </mapping>
- <field type="one-way">
- <a get-method="getNegativeVotersCount">negativeVotersCount</a>
- <b>negativeVotersCount</b>
- </field>
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.server.domain.Comment
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.client.dto.CommentDTO
+ </class-b>
+ <field>
+ <a>author</a>
+ <b>author</b>
+ <a-hint>
+ org.ourproject.kune.platf.server.domain.User
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.client.dto.UserSimpleDTO
+ </b-hint>
+ </field>
- <field type="one-way">
- <a get-method="getAbuseInformersCount">abuseInformersCount</a>
- <b>abuseInformersCount</b>
- </field>
- </mapping>
-
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.LinkDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.User</class-b>
- <field>
- <a>longName</a>
- <b>name</b>
- </field>
- </mapping>
-
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.ChatUserParamsDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.ChatUserParams</class-b>
- </mapping>
-
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.ContentStatusDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.domain.ContentStatus</class-b>
- </mapping>
-
- <mapping>
- <class-a>org.ourproject.kune.platf.client.dto.AccessRolDTO</class-a>
- <class-b>org.ourproject.kune.platf.server.access.AccessRol</class-b>
- </mapping>
-
+ <field>
+ <a>childs</a>
+ <b>childs</b>
+ <a-hint>
+ org.ourproject.kune.platf.server.domain.Comment
+ </a-hint>
+ <b-hint>
+ org.ourproject.kune.platf.client.dto.CommentDTO
+ </b-hint>
+ </field>
+
+ <field type="one-way">
+ <a get-method="getPositiveVotersCount">
+ positiveVotersCount
+ </a>
+ <b>positiveVotersCount</b>
+ </field>
+
+ <field type="one-way">
+ <a get-method="getNegativeVotersCount">
+ negativeVotersCount
+ </a>
+ <b>negativeVotersCount</b>
+ </field>
+
+ <field type="one-way">
+ <a get-method="getAbuseInformersCount">
+ abuseInformersCount
+ </a>
+ <b>abuseInformersCount</b>
+ </field>
+ </mapping>
+
+ <mapping>
+ <class-a>org.ourproject.kune.platf.client.dto.LinkDTO</class-a>
+ <class-b>org.ourproject.kune.platf.server.domain.User</class-b>
+ <field>
+ <a>longName</a>
+ <b>name</b>
+ </field>
+ </mapping>
+
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.ChatUserParamsDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.ChatUserParams
+ </class-b>
+ </mapping>
+
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.ContentStatusDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.domain.ContentStatus
+ </class-b>
+ </mapping>
+
+ <mapping>
+ <class-a>
+ org.ourproject.kune.platf.client.dto.AccessRolDTO
+ </class-a>
+ <class-b>
+ org.ourproject.kune.platf.server.access.AccessRol
+ </class-b>
+ </mapping>
+
</mappings>
\ No newline at end of file
Added: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistryTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistryTest.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ContentIconsRegistryTest.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -0,0 +1,81 @@
+package org.ourproject.kune.platf.client.actions;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ourproject.kune.platf.client.dto.BasicMimeTypeDTO;
+
+public class ContentIconsRegistryTest {
+
+ private static final String CONTENT_TYPE_TEST = "somecontenttype";
+ private static final String ICON = "someicon";
+ private static final String OTHERICON = "othericon";
+ private static final String JUSTANOTHERICON = "justanothericon";
+
+ private ContentIconsRegistry reg;
+
+ @Before
+ public void before() {
+ reg = new ContentIconsRegistry();
+ }
+
+ @Test
+ public void testBasic() {
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, ICON);
+ assertEquals(ICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST));
+ }
+
+ @Test
+ public void testBasicMimeType() {
+ final BasicMimeTypeDTO mimeType = new BasicMimeTypeDTO("image/png");
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, mimeType, ICON);
+ assertEquals(ICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, mimeType));
+ assertEquals("", reg.getContentTypeIcon(CONTENT_TYPE_TEST));
+ }
+
+ @Test
+ public void testBasicMimeTypeWithDef() {
+ final BasicMimeTypeDTO mimeType = new BasicMimeTypeDTO("image/png");
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, mimeType, ICON);
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, OTHERICON);
+ assertEquals(ICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, mimeType));
+ assertEquals(OTHERICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST));
+ }
+
+ @Test
+ public void testBasicMimeTypeWithDefType() {
+ final BasicMimeTypeDTO mimeType = new BasicMimeTypeDTO("image/png");
+ final BasicMimeTypeDTO genericMimeType = new BasicMimeTypeDTO("image");
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, mimeType, ICON);
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, genericMimeType, OTHERICON);
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, JUSTANOTHERICON);
+ assertEquals(ICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, mimeType));
+ assertEquals(OTHERICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, genericMimeType));
+ assertEquals(JUSTANOTHERICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST));
+ }
+
+ @Test
+ public void testBasicMimeTypeWithOnlyDefType() {
+ final BasicMimeTypeDTO mimeType = new BasicMimeTypeDTO("image/png");
+ final BasicMimeTypeDTO genericMimeType = new BasicMimeTypeDTO("image");
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, genericMimeType, OTHERICON);
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, JUSTANOTHERICON);
+ assertEquals(OTHERICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, mimeType));
+ assertEquals(OTHERICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, genericMimeType));
+ assertEquals(JUSTANOTHERICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST));
+ }
+
+ @Test
+ public void testNoResult() {
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, new BasicMimeTypeDTO("text", "plain"), ICON);
+ assertEquals("", reg.getContentTypeIcon(CONTENT_TYPE_TEST, new BasicMimeTypeDTO("text", "rtf")));
+ }
+
+ @Test
+ public void testNullBasicMimeType() {
+ final BasicMimeTypeDTO mimeType = null;
+ reg.registerContentTypeIcon(CONTENT_TYPE_TEST, ICON);
+ assertEquals(ICON, reg.getContentTypeIcon(CONTENT_TYPE_TEST, mimeType));
+ }
+}
Added: trunk/src/test/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTOTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTOTest.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/dto/BasicMimeTypeDTOTest.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -0,0 +1,47 @@
+package org.ourproject.kune.platf.client.dto;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class BasicMimeTypeDTOTest {
+
+ @Test
+ public void testNoSubtype() {
+ final BasicMimeTypeDTO mime = new BasicMimeTypeDTO("somesimplemime");
+ assertEquals("somesimplemime", mime.getType());
+ assertEquals(null, mime.getSubtype());
+ assertEquals("somesimplemime", mime.toString());
+ }
+
+ @Test
+ public void testNoSubtypeWithSlash() {
+ final BasicMimeTypeDTO mime = new BasicMimeTypeDTO("somesimplemime/");
+ assertEquals("somesimplemime", mime.getType());
+ assertEquals(null, mime.getSubtype());
+ assertEquals("somesimplemime", mime.toString());
+ }
+
+ @Test
+ public void testNull() {
+ final BasicMimeTypeDTO mime = new BasicMimeTypeDTO(null);
+ assertEquals(null, mime.getType());
+ assertEquals(null, mime.getSubtype());
+ }
+
+ @Test
+ public void testSeveralSlashs() {
+ final BasicMimeTypeDTO mime = new BasicMimeTypeDTO("somesimplemime/subtype/thisisposible?");
+ assertEquals("somesimplemime", mime.getType());
+ assertEquals("subtype/thisisposible?", mime.getSubtype());
+ assertEquals("somesimplemime/subtype/thisisposible?", mime.toString());
+ }
+
+ @Test
+ public void testSubtype() {
+ final BasicMimeTypeDTO mime = new BasicMimeTypeDTO("somesimplemime/subtype");
+ assertEquals("somesimplemime", mime.getType());
+ assertEquals("subtype", mime.getSubtype());
+ assertEquals("somesimplemime/subtype", mime.toString());
+ }
+}
Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/ContentManagerTest.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -0,0 +1,105 @@
+package org.ourproject.kune.platf.server.manager;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.TimeZone;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.ourproject.kune.platf.server.PersistenceTest;
+import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.domain.BasicMimeType;
+import org.ourproject.kune.platf.server.domain.Container;
+import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.Group;
+import org.ourproject.kune.platf.server.domain.I18nCountry;
+import org.ourproject.kune.platf.server.domain.I18nLanguage;
+import org.ourproject.kune.platf.server.domain.License;
+import org.ourproject.kune.platf.server.domain.User;
+
+import com.google.inject.Inject;
+
+public class ContentManagerTest extends PersistenceTest {
+
+ @Inject
+ User userFinder;
+ @Inject
+ Group groupFinder;
+ @Inject
+ License licenseFinder;
+ @Inject
+ ContentManager contentManager;
+ @Inject
+ GroupManager groupManager;
+ @Inject
+ UserManager userManager;
+ @Inject
+ LicenseManager licenseManager;
+ @Inject
+ I18nLanguageManager languageManager;
+ @Inject
+ I18nCountryManager countryManager;
+ private User user;
+ private License defLicense;
+
+ public ContentManagerTest() {
+ super("test_db", "kune.properties");
+ }
+
+ @After
+ public void close() {
+ if (getTransaction().isActive()) {
+ getTransaction().rollback();
+ }
+ }
+
+ @Before
+ public void insertData() throws Exception {
+ openTransaction();
+ assertEquals(0, userFinder.getAll().size());
+ assertEquals(0, groupFinder.getAll().size());
+ assertEquals(0, licenseFinder.getAll().size());
+ final I18nLanguage english = new I18nLanguage(new Long(1819), "English", "English", "en");
+ languageManager.persist(english);
+ final I18nCountry gb = new I18nCountry(new Long(75), "GB", "GBP", ".", "£%n", "", ".", "United Kingdom",
+ "western", ",");
+ countryManager.persist(gb);
+ user = userManager.createUser("username", "the user name", "email(a)example.com", "userPassword", "en", "GB",
+ TimeZone.getDefault().getID());
+ defLicense = new License("by-sa", "Creative Commons Attribution-ShareAlike", "",
+ "http://creativecommons.org/licenses/by-sa/3.0/", true, true, false, "", "");
+ licenseManager.persist(defLicense);
+ groupManager.createUserGroup(user);
+ }
+
+ @Test
+ public void testBasicMimePersist() {
+ final String mimetype = "application/pdf";
+ createContentWithMime(mimetype);
+ }
+
+ @Test
+ public void testBasicMimePersistWithoutSubtype() {
+ final String mimetype = "application";
+ createContentWithMime(mimetype);
+ }
+
+ @Test
+ public void testUTF8Persist() {
+ final Container container = Mockito.mock(Container.class);
+ final Content cnt = contentManager.createContent("汉è¯/漢語", "汉è¯/漢語", user, container);
+ final Content newCnt = contentManager.find(cnt.getId());
+ assertEquals("汉è¯/漢語", newCnt.getTitle());
+ }
+
+ private void createContentWithMime(final String mimetype) {
+ final Container container = Mockito.mock(Container.class);
+ final Content cnt = contentManager.createContent("title", "body", user, container);
+ cnt.setMimeType(new BasicMimeType(mimetype));
+ persist(cnt);
+ final Content newCnt = contentManager.find(cnt.getId());
+ assertEquals(mimetype, newCnt.getMimeType().toString());
+ }
+}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/GroupManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/GroupManagerTest.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/GroupManagerTest.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -48,169 +48,168 @@
@After
public void close() {
- if (getTransaction().isActive()) {
- getTransaction().rollback();
- }
-
+ if (getTransaction().isActive()) {
+ getTransaction().rollback();
+ }
}
@Test
public void createdGroupShoudHaveValidSocialNetwork() throws Exception {
- final Group group = new Group("short", "longName", defLicense, GroupType.PROJECT);
- groupManager.createGroup(group, user);
- final SocialNetwork socialNetwork = group.getSocialNetwork();
- final AccessLists lists = socialNetwork.getAccessLists();
- assertTrue(lists.getAdmins().includes(user.getUserGroup()));
- assertTrue(lists.getEditors().isEmpty());
- assertTrue(lists.getViewers().isEmpty());
- closeTransaction();
+ final Group group = new Group("short", "longName", defLicense, GroupType.PROJECT);
+ groupManager.createGroup(group, user);
+ final SocialNetwork socialNetwork = group.getSocialNetwork();
+ final AccessLists lists = socialNetwork.getAccessLists();
+ assertTrue(lists.getAdmins().includes(user.getUserGroup()));
+ assertTrue(lists.getEditors().isEmpty());
+ assertTrue(lists.getViewers().isEmpty());
+ closeTransaction();
}
@Test
public void createGroup() throws Exception {
- final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
- GroupType.PROJECT);
- groupManager.createGroup(group, user);
- final Group otherGroup = groupManager.findByShortName("ysei");
+ final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
+ GroupType.PROJECT);
+ groupManager.createGroup(group, user);
+ final Group otherGroup = groupManager.findByShortName("ysei");
- assertEquals(group.getLongName(), otherGroup.getLongName());
- assertEquals(group.getShortName(), otherGroup.getShortName());
- closeTransaction();
+ assertEquals(group.getLongName(), otherGroup.getLongName());
+ assertEquals(group.getShortName(), otherGroup.getShortName());
+ closeTransaction();
}
@Test
public void createGroupAndSearch() throws Exception, ParseException {
- final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
- GroupType.PROJECT);
- groupManager.createGroup(group, user);
- groupManager.reIndex();
- final SearchResult<Group> result = groupManager.search("ysei");
- assertEquals(1, (long) result.getSize());
- assertEquals("ysei", result.getList().get(0).getShortName());
- rollbackTransaction();
+ final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
+ GroupType.PROJECT);
+ groupManager.createGroup(group, user);
+ groupManager.reIndex();
+ final SearchResult<Group> result = groupManager.search("ysei");
+ assertEquals(1, (long) result.getSize());
+ assertEquals("ysei", result.getList().get(0).getShortName());
+ rollbackTransaction();
}
@Test(expected = GroupNameInUseException.class)
public void createGroupWithExistingLongName() throws Exception {
- final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
- GroupType.PROJECT);
- groupManager.createGroup(group, user);
+ final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
+ GroupType.PROJECT);
+ groupManager.createGroup(group, user);
- final Group group2 = new Group("ysei2", "Yellow Submarine Environmental Initiative", defLicense,
- GroupType.PROJECT);
- group2.setDefaultLicense(defLicense);
- groupManager.createGroup(group2, user);
+ final Group group2 = new Group("ysei2", "Yellow Submarine Environmental Initiative", defLicense,
+ GroupType.PROJECT);
+ group2.setDefaultLicense(defLicense);
+ groupManager.createGroup(group2, user);
- rollbackTransaction();
+ rollbackTransaction();
}
@Test(expected = GroupNameInUseException.class)
public void createGroupWithExistingShortName() throws Exception {
- final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
- GroupType.PROJECT);
- groupManager.createGroup(group, user);
+ final Group group = new Group("ysei", "Yellow Submarine Environmental Initiative", defLicense,
+ GroupType.PROJECT);
+ groupManager.createGroup(group, user);
- final Group group2 = new Group("ysei", "Yellow Submarine Environmental Initiative 2", defLicense,
- GroupType.PROJECT);
- groupManager.createGroup(group2, user);
+ final Group group2 = new Group("ysei", "Yellow Submarine Environmental Initiative 2", defLicense,
+ GroupType.PROJECT);
+ groupManager.createGroup(group2, user);
- rollbackTransaction();
+ rollbackTransaction();
}
@Test(expected = EmailAddressInUseException.class)
public void createUserExistingEmail() throws I18nNotFoundException, GroupNameInUseException,
- EmailAddressInUseException {
- final User user1 = userManager.createUser("test", "test 1 name", "test1(a)example.com", "some password", "en",
- "GB", "GMT");
- groupManager.createUserGroup(user1);
- final User user2 = userManager.createUser("test2", "test 2 name", "test1(a)example.com", "some password", "en",
- "GB", "GMT");
- groupManager.createUserGroup(user2);
+ EmailAddressInUseException {
+ final User user1 = userManager.createUser("test", "test 1 name", "test1(a)example.com", "some password", "en",
+ "GB", "GMT");
+ groupManager.createUserGroup(user1);
+ final User user2 = userManager.createUser("test2", "test 2 name", "test1(a)example.com", "some password", "en",
+ "GB", "GMT");
+ groupManager.createUserGroup(user2);
}
@Test(expected = GroupNameInUseException.class)
public void createUserExistingLongName() throws I18nNotFoundException, GroupNameInUseException,
- EmailAddressInUseException {
- final User user1 = userManager.createUser("test", "test 1 name", "test1(a)example.com", "some password", "en",
- "GB", "GMT");
- groupManager.createUserGroup(user1);
- final User user2 = userManager.createUser("test2", "test 1 name", "test2(a)example.com", "some password", "en",
- "GB", "GMT");
- groupManager.createUserGroup(user2);
+ EmailAddressInUseException {
+ final User user1 = userManager.createUser("test", "test 1 name", "test1(a)example.com", "some password", "en",
+ "GB", "GMT");
+ groupManager.createUserGroup(user1);
+ final User user2 = userManager.createUser("test2", "test 1 name", "test2(a)example.com", "some password", "en",
+ "GB", "GMT");
+ groupManager.createUserGroup(user2);
}
@Test(expected = GroupNameInUseException.class)
public void createUserExistingShortName() throws I18nNotFoundException, GroupNameInUseException,
- EmailAddressInUseException {
- final User user1 = userManager.createUser("test", "test 1 name", "test1(a)example.com", "some password", "en",
- "GB", "GMT");
- groupManager.createUserGroup(user1);
- final User user2 = userManager.createUser("test", "test 2 name", "test2(a)example.com", "some password", "en",
- "GB", "GMT");
- groupManager.createUserGroup(user2);
+ EmailAddressInUseException {
+ final User user1 = userManager.createUser("test", "test 1 name", "test1(a)example.com", "some password", "en",
+ "GB", "GMT");
+ groupManager.createUserGroup(user1);
+ final User user2 = userManager.createUser("test", "test 2 name", "test2(a)example.com", "some password", "en",
+ "GB", "GMT");
+ groupManager.createUserGroup(user2);
}
@Test(expected = EmailAddressInUseException.class)
public void createUserWithExistingEmail() throws Exception {
- final User user2 = userManager.createUser("username2", "the user name 2", "email(a)example.com", "userPassword",
- "en", "GB", TimeZone.getDefault().getID());
- groupManager.createUserGroup(user2);
- rollbackTransaction();
+ final User user2 = userManager.createUser("username2", "the user name 2", "email(a)example.com", "userPassword",
+ "en", "GB", TimeZone.getDefault().getID());
+ groupManager.createUserGroup(user2);
+ rollbackTransaction();
}
@Test(expected = GroupNameInUseException.class)
public void createUserWithExistingLongName() throws Exception {
- final User user2 = userManager.createUser("username2", "the user name", "email2(a)example.com", "userPassword",
- "en", "GB", TimeZone.getDefault().getID());
- groupManager.createUserGroup(user2);
- rollbackTransaction();
+ final User user2 = userManager.createUser("username2", "the user name", "email2(a)example.com", "userPassword",
+ "en", "GB", TimeZone.getDefault().getID());
+ groupManager.createUserGroup(user2);
+ rollbackTransaction();
}
@Test(expected = GroupNameInUseException.class)
public void createUserWithExistingShortName() throws Exception {
- final User user2 = userManager.createUser("username", "the user name 2", "email2(a)example.com", "userPassword",
- "en", "GB", TimeZone.getDefault().getID());
- groupManager.createUserGroup(user2);
- rollbackTransaction();
+ final User user2 = userManager.createUser("username", "the user name 2", "email2(a)example.com", "userPassword",
+ "en", "GB", TimeZone.getDefault().getID());
+ groupManager.createUserGroup(user2);
+ rollbackTransaction();
}
@Test
public void groupSearchPagination() throws Exception, ParseException {
- for (int i = 1; i < 10; i++) {
- createTestGroup(i);
- }
- groupManager.reIndex();
- final SearchResult<Group> result = groupManager.search("Yellow", 0, 5);
- assertEquals(9, (long) result.getSize());
- assertEquals(5, result.getList().size());
- final SearchResult<Group> result2 = groupManager.search("Yellow", 5, 5);
- assertEquals(9, (long) result2.getSize());
- assertEquals(4, result2.getList().size());
- rollbackTransaction();
+ for (int i = 1; i < 10; i++) {
+ createTestGroup(i);
+ }
+ groupManager.reIndex();
+ final SearchResult<Group> result = groupManager.search("Yellow", 0, 5);
+ assertEquals(9, (long) result.getSize());
+ assertEquals(5, result.getList().size());
+ final SearchResult<Group> result2 = groupManager.search("Yellow", 5, 5);
+ assertEquals(9, (long) result2.getSize());
+ assertEquals(4, result2.getList().size());
+ rollbackTransaction();
}
@Before
public void insertData() throws Exception {
- openTransaction();
- assertEquals(0, userFinder.getAll().size());
- assertEquals(0, groupFinder.getAll().size());
- assertEquals(0, licenseFinder.getAll().size());
- final I18nLanguage english = new I18nLanguage(new Long(1819), "English", "English", "en");
- languageManager.persist(english);
- final I18nCountry gb = new I18nCountry(new Long(75), "GB", "GBP", ".", "£%n", "", ".", "United Kingdom",
- "western", ",");
- countryManager.persist(gb);
- user = userManager.createUser("username", "the user name", "email(a)example.com", "userPassword", "en", "GB",
- TimeZone.getDefault().getID());
- defLicense = new License("by-sa", "Creative Commons Attribution-ShareAlike", "",
- "http://creativecommons.org/licenses/by-sa/3.0/", true, true, false, "", "");
- licenseManager.persist(defLicense);
- groupManager.createUserGroup(user);
+ openTransaction();
+ assertEquals(0, userFinder.getAll().size());
+ assertEquals(0, groupFinder.getAll().size());
+ assertEquals(0, licenseFinder.getAll().size());
+ final I18nLanguage english = new I18nLanguage(new Long(1819), "English", "English", "en");
+ languageManager.persist(english);
+ final I18nCountry gb = new I18nCountry(new Long(75), "GB", "GBP", ".", "£%n", "", ".", "United Kingdom",
+ "western", ",");
+ countryManager.persist(gb);
+ user = userManager.createUser("username", "the user name", "email(a)example.com", "userPassword", "en", "GB",
+ TimeZone.getDefault().getID());
+ defLicense = new License("by-sa", "Creative Commons Attribution-ShareAlike", "",
+ "http://creativecommons.org/licenses/by-sa/3.0/", true, true, false, "", "");
+ licenseManager.persist(defLicense);
+ groupManager.createUserGroup(user);
}
private void createTestGroup(final int number) throws Exception {
- final Group g = new Group("ysei" + number, "Yellow Submarine Environmental Initiative " + number, defLicense,
- GroupType.PROJECT);
- groupManager.createGroup(g, user);
+ final Group g = new Group("ysei" + number, "Yellow Submarine Environmental Initiative " + number, defLicense,
+ GroupType.PROJECT);
+ groupManager.createGroup(g, user);
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -4,12 +4,12 @@
import org.junit.Test;
import org.ourproject.kune.platf.client.errors.SessionExpiredException;
import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
-import org.ourproject.kune.platf.integration.IntegrationTest;
import org.ourproject.kune.platf.integration.IntegrationTestHelper;
+import org.ourproject.kune.platf.integration.content.ContentServiceIntegrationTest;
import com.google.inject.Inject;
-public class FileUploadManagerTest extends IntegrationTest {
+public class FileUploadManagerTest extends ContentServiceIntegrationTest {
@Inject
FileUploadManager fileUploadManager;
@@ -19,6 +19,18 @@
new IntegrationTestHelper(this);
}
+ // @Test
+ public void testMimeTypePersist() throws Exception {
+ // doLogin();
+ // final FileItem fileItem = Mockito.mock(FileItem.class);
+ // file = File.createTempFile("test", ".txt");
+ // final Content cnt = fileUploadManager.createFile(super.getHash(),
+ // getDefaultContent().getContainer()
+ // .getStateToken(), "somefilename", fileItem);
+ // final StateDTO state = contentService.getContent(getHash(),
+ // cnt.getStateToken());
+ }
+
@Test(expected = SessionExpiredException.class)
public void testSessionExp() throws Exception {
fileUploadManager.createFile("otherhash", null, null, null);
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java 2008-09-24 22:54:07 UTC (rev 884)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/mapper/MapperTest.java 2008-09-26 01:40:25 UTC (rev 885)
@@ -23,6 +23,7 @@
import org.ourproject.kune.platf.server.TestDomainHelper;
import org.ourproject.kune.platf.server.TestHelper;
import org.ourproject.kune.platf.server.access.AccessRights;
+import org.ourproject.kune.platf.server.domain.BasicMimeType;
import org.ourproject.kune.platf.server.domain.Comment;
import org.ourproject.kune.platf.server.domain.Container;
import org.ourproject.kune.platf.server.domain.Content;
@@ -208,6 +209,14 @@
}
@Test
+ public void testMimeMapping() {
+ final Content d = createDefContent();
+ d.setMimeType(new BasicMimeType("application/pdf"));
+ final ContentDTO contentDTO = mapper.map(d, ContentDTO.class);
+ assertEquals("application/pdf", contentDTO.getMimeType().toString());
+ }
+
+ @Test
public void testStateTokenInStateMap() {
final StateToken stateToken = new StateToken(TESTGROUPSHORTNAME, TESTTOOL, "1", "2");
final StateToken stateTokenMapped = mapper.map(stateToken, StateToken.class);
1
0
Author: vjrj
Date: 2008-09-25 00:54:07 +0200 (Thu, 25 Sep 2008)
New Revision: 884
Modified:
trunk/pom.xml
trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java
Log:
Complete - task 68: File upload content persist
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/pom.xml 2008-09-24 22:54:07 UTC (rev 884)
@@ -247,6 +247,11 @@
<version>2.4</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>jmimemagic</groupId>
+ <artifactId>jmimemagic</artifactId>
+ <version>0.1.2</version>
+ </dependency>
<!-- testing dependencies -->
<dependency>
@@ -283,7 +288,6 @@
</dependency>
</dependencies>
-
<!-- http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/ind… -->
<repositories>
<repository>
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -61,7 +61,7 @@
}
private void setState(final StateDTO state) {
- contextNavigatorProvider.get().setState(state);
+ contextNavigatorProvider.get().setState(state, true);
adminContextProvider.get().setState(state);
showFolders();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/ContentDTO.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -30,11 +30,16 @@
private StateToken stateToken;
private ContentStatusDTO status;
private AccessRightsDTO rights;
+ private String mimeType;
public Long getId() {
return id;
}
+ public String getMimeType() {
+ return mimeType;
+ }
+
public AccessRightsDTO getRights() {
return rights;
}
@@ -59,6 +64,10 @@
this.id = id;
}
+ public void setMimeType(final String mimeType) {
+ this.mimeType = mimeType;
+ }
+
public void setRights(final AccessRightsDTO rights) {
this.rights = rights;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -349,7 +349,8 @@
register(Singleton.class, new Factory<FileUploader>(FileUploader.class) {
public FileUploader create() {
- final FileUploaderPresenter presenter = new FileUploaderPresenter($(Session.class));
+ final FileUploaderPresenter presenter = new FileUploaderPresenter($(Session.class),
+ $$(ContextNavigator.class));
final FileUploaderDialog panel = new FileUploaderDialog(presenter, i18n, $(WorkspaceSkeleton.class));
presenter.init(panel);
return presenter;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -13,6 +13,7 @@
import com.gwtext.client.core.UrlParam;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtextux.client.widgets.upload.UploadDialog;
import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter;
@@ -111,6 +112,9 @@
dialog.setId(SITE_FILE_UPLOADER);
// dialog.setUploadAutostart(true);
dialog.setResetOnHide(false);
+ dialog.setAllowCloseOnUpload(true);
+ dialog.setCloseAction(Window.HIDE);
+
dialog.addListener(new UploadDialogListenerAdapter() {
@Override
public boolean onBeforeAdd(final UploadDialog source, final String filename) {
@@ -128,6 +132,7 @@
traybarButton.destroy();
traybarButton = null;
}
+ presenter.onUploadComplete();
}
@Override
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -2,7 +2,9 @@
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
+import com.calclab.suco.client.ioc.Provider;
import com.calclab.suco.client.listener.Listener0;
public class FileUploaderPresenter implements FileUploader {
@@ -10,9 +12,11 @@
private FileUploaderView view;
private final Session session;
private StateToken currentUploadStateToken;
+ private final Provider<ContextNavigator> navProvider;
- public FileUploaderPresenter(final Session session) {
+ public FileUploaderPresenter(final Session session, final Provider<ContextNavigator> navProvider) {
this.session = session;
+ this.navProvider = navProvider;
}
public boolean checkFolderChange() {
@@ -47,6 +51,10 @@
});
}
+ public void onUploadComplete() {
+ navProvider.get().refresh(currentUploadStateToken);
+ }
+
public void resetPermittedExtensions() {
view.resetPermittedExtensions();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/Content.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -118,6 +118,8 @@
@Column(nullable = false)
private ContentStatus status;
+ private String mimeType;
+
public Content() {
translations = new ArrayList<ContentTranslation>();
authors = new ArrayList<User>();
@@ -191,6 +193,10 @@
return license;
}
+ public String getMimeType() {
+ return mimeType;
+ }
+
public Group getOwner(final Group group) {
return container.getOwner();
}
@@ -293,6 +299,10 @@
this.license = license;
}
+ public void setMimeType(final String mimeType) {
+ this.mimeType = mimeType;
+ }
+
public void setPublishedOn(final Date publishedOn) {
this.publishedOn = publishedOn;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -3,6 +3,11 @@
import java.io.File;
import java.io.IOException;
+import net.sf.jmimemagic.MagicException;
+import net.sf.jmimemagic.MagicMatch;
+import net.sf.jmimemagic.MagicMatchNotFoundException;
+import net.sf.jmimemagic.MagicParseException;
+
public interface FileManager {
/**
@@ -18,6 +23,8 @@
*/
File createFileWithSequentialName(String dir, String fileName) throws IOException;
+ MagicMatch getMimeType(File file) throws MagicParseException, MagicMatchNotFoundException, MagicException;
+
/**
* @param dir
* the directory (use File.separator for dir delimiters)
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -3,6 +3,12 @@
import java.io.File;
import java.io.IOException;
+import net.sf.jmimemagic.Magic;
+import net.sf.jmimemagic.MagicException;
+import net.sf.jmimemagic.MagicMatch;
+import net.sf.jmimemagic.MagicMatchNotFoundException;
+import net.sf.jmimemagic.MagicParseException;
+
import org.ourproject.kune.platf.server.manager.FileManager;
import com.google.inject.Singleton;
@@ -21,6 +27,11 @@
return file;
}
+ public MagicMatch getMimeType(final File file) throws MagicParseException, MagicMatchNotFoundException,
+ MagicException {
+ return Magic.getMagicMatch(file, true);
+ }
+
public boolean mkdir(final String dir) {
return (new File(dir)).mkdirs();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -12,6 +12,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import net.sf.jmimemagic.MagicMatch;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
@@ -20,19 +21,27 @@
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.ourproject.kune.docs.server.DocumentServerTool;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
+import org.ourproject.kune.platf.server.UserSession;
import org.ourproject.kune.platf.server.access.AccessRol;
+import org.ourproject.kune.platf.server.access.AccessService;
import org.ourproject.kune.platf.server.auth.ActionLevel;
import org.ourproject.kune.platf.server.auth.Authenticated;
import org.ourproject.kune.platf.server.auth.Authorizated;
import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.domain.Container;
+import org.ourproject.kune.platf.server.domain.Content;
+import org.ourproject.kune.platf.server.domain.User;
import org.ourproject.kune.platf.server.manager.FileManager;
import org.ourproject.kune.platf.server.properties.KuneProperties;
import com.google.inject.Inject;
import com.google.inject.servlet.RequestScoped;
+import com.wideplay.warp.persist.TransactionType;
+import com.wideplay.warp.persist.Transactional;
@RequestScoped
public class FileUploadManager extends HttpServlet {
@@ -44,8 +53,12 @@
@Inject
KuneProperties kuneProperties;
@Inject
+ UserSession userSession;
+ @Inject
ContentManager contentManager;
@Inject
+ AccessService accessService;
+ @Inject
FileManager fileManager;
@Inject
I18nTranslationService i18n;
@@ -114,20 +127,30 @@
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor, actionLevel = ActionLevel.container)
+ @Transactional(type = TransactionType.READ_WRITE)
JSONObject createFile(final String userHash, final StateToken stateToken, final String fileName,
final FileItem fileUploadItem) throws Exception {
- final String destDir = calculateUploadDirLocation(stateToken);
- fileManager.mkdir(destDir);
- final File file = fileManager.createFileWithSequentialName(destDir, fileName);
+ final String relDir = calculateUploadDirLocation(stateToken);
+ final String absDir = kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + relDir;
+ fileManager.mkdir(absDir);
+ final File file = fileManager.createFileWithSequentialName(absDir, fileName);
fileUploadItem.write(file);
- fileUploadItem.getContentType();
- // here ContentManager code
+ final MagicMatch magic = fileManager.getMimeType(file);
+
+ // Persist
+ final User user = userSession.getUser();
+ final Container container = accessService.accessToContainer(new Long(stateToken.getFolder()), user,
+ AccessRol.Editor);
+ final Content content = contentManager.createContent(FileUtils.getFileNameWithoutExtension(file.getName(),
+ magic.getExtension()), relDir + File.separator + file.getName(), user, container);
+ content.setTypeId(DocumentServerTool.TYPE_UPLOADEDFILE);
+ content.setMimeType(magic.getMimeType());
return createSuccessResponse();
}
private String calculateUploadDirLocation(final StateToken stateToken) {
- return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.separator + stateToken.getGroup()
- + File.separator + stateToken.getTool() + File.separator + stateToken.getFolder();
+ return File.separator + stateToken.getGroup() + File.separator + stateToken.getTool() + File.separator
+ + stateToken.getFolder();
}
private JSONObject createJsonResponse(final boolean success, final String message) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -2,6 +2,15 @@
public class FileUtils {
+ public static String getFileNameWithoutExtension(final String fileName, final String extension) {
+ final int extlength = extension.length();
+ if (extlength > 0) {
+ return fileName.substring(0, fileName.length() - extlength - 1);
+ } else {
+ return fileName;
+ }
+ }
+
public static String getNextSequentialFileName(final String fileName) {
final int lastSpace = fileName.lastIndexOf(" ");
if (lastSpace != -1) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigator.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -32,12 +32,14 @@
boolean isSelected(StateToken stateToken);
+ void refresh(StateToken stateToken);
+
void selectItem(StateToken stateToken);
void setEditOnNextStateChange(boolean edit);
void setItemText(StateToken stateToken, String name);
- void setState(StateDTO state);
+ void setState(StateDTO state, boolean selectItem);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -37,7 +37,8 @@
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.data.Node;
-import com.gwtext.client.data.Tree;
+import com.gwtext.client.dd.DragData;
+import com.gwtext.client.dd.DragDrop;
import com.gwtext.client.widgets.Editor;
import com.gwtext.client.widgets.event.EditorListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
@@ -45,6 +46,7 @@
import com.gwtext.client.widgets.menu.Item;
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.menu.event.BaseItemListenerAdapter;
+import com.gwtext.client.widgets.tree.DropNodeCallback;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
@@ -238,6 +240,13 @@
root.expand();
createItemMenu(rootId, actions, stateToken);
treePanel.addListener(new TreePanelListenerAdapter() {
+ public boolean doBeforeNodeDrop(final TreePanel treePanel, final TreeNode target, final DragData dragData,
+ final String point, final DragDrop source, final TreeNode dropNode,
+ final DropNodeCallback dropNodeCallback) {
+ Site.info("Drag & drop of contents in development");
+ return false;
+ }
+
public void onContextMenu(final TreeNode node, final EventObject e) {
final Menu menu = contextMenus.get(node.getId());
if (menu != null && menu.getItems().length > 0) {
@@ -246,14 +255,6 @@
Log.info("Empty item menu");
}
}
-
- @Override
- public void onMoveNode(final Tree treePanel, final TreeNode node, final TreeNode oldParent,
- final TreeNode newParent, final int index) {
- newParent.removeChild(node);
- oldParent.appendChild(node);
- Site.info("Drag & drop of contents in development");
- }
});
treePanel.setLines(false);
treePanel.setEnableDD(isEditable);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -37,6 +37,7 @@
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.dto.UserInfoDTO;
+import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
@@ -149,6 +150,14 @@
}
}
+ public void refresh(final StateToken stateToken) {
+ contentServiceProvider.get().getContent(session.getUserHash(), stateToken, new AsyncCallbackSimple<StateDTO>() {
+ public void onSuccess(final StateDTO result) {
+ setState(result, false);
+ }
+ });
+ }
+
public void selectItem(final StateToken stateToken) {
view.selectItem(genId(stateToken));
toolbar.disableMenusAndClearButtons();
@@ -163,7 +172,7 @@
view.setItemText(genId(stateToken), name);
}
- public void setState(final StateDTO state) {
+ public void setState(final StateDTO state, final boolean select) {
final ContainerDTO container = state.getContainer();
final StateToken stateToken = state.getStateToken();
final AccessRightsDTO containerRights = state.getContainerRights();
@@ -209,11 +218,14 @@
// Finaly
if (mustEditOnNextStateChange()) {
+ // Code smell
selectItem(stateToken);
editItem(stateToken);
setEditOnNextStateChange(false);
} else {
- selectItem(stateToken);
+ if (select) {
+ selectItem(stateToken);
+ }
}
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -20,7 +20,7 @@
public void before() {
session = Mockito.mock(Session.class);
view = Mockito.mock(FileUploaderView.class);
- presenter = new FileUploaderPresenter(session);
+ presenter = new FileUploaderPresenter(session, null);
presenter.init(view);
Mockito.stub(session.getUserHash()).toReturn(SOMEUSER_HASH);
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-24 20:16:24 UTC (rev 883)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-24 22:54:07 UTC (rev 884)
@@ -20,6 +20,16 @@
}
@Test
+ public void testFileNameWExtensionSimple() {
+ assertEquals("test", FileUtils.getFileNameWithoutExtension("test.txt", "txt"));
+ }
+
+ @Test
+ public void testFileNameWithoutExtension() {
+ assertEquals("test", FileUtils.getFileNameWithoutExtension("test", ""));
+ }
+
+ @Test
public void testIfSeq101return102() {
assertEquals(SIMPLE_FILE_NAME + " 102", FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + " 101"));
}
1
0
Author: vjrj
Date: 2008-09-24 22:16:24 +0200 (Wed, 24 Sep 2008)
New Revision: 883
Added:
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploader.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderView.java
trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/
trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/
trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
Removed:
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
Modified:
trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
Log:
Uploads working with auth and rols check. Pending content reference persistence.
Incomplete - task 66: Add a FileUploadManagerTest
Modified: trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -23,6 +23,7 @@
import org.ourproject.kune.docs.client.DocumentClientModule;
import org.ourproject.kune.platf.client.services.KuneCoreModule;
import org.ourproject.kune.platf.client.services.KuneModule;
+import org.ourproject.kune.platf.client.services.KuneWorkspaceModule;
import com.allen_sauer.gwt.log.client.Log;
import com.calclab.emiteuimodule.client.EmiteUIModule;
@@ -50,8 +51,7 @@
}
public void onModuleLoadCont() {
- Suco.install(new KuneCoreModule(), new EmiteUIModule(), new DocumentClientModule(), new ChatClientModule(),
- new KuneModule());
- // Suco.get(Application.class).start();
+ Suco.install(new KuneCoreModule(), new KuneWorkspaceModule(), new EmiteUIModule(), new DocumentClientModule(),
+ new ChatClientModule(), new KuneModule());
}
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -23,12 +23,11 @@
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
-import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
+import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.site.Site;
-import com.allen_sauer.gwt.log.client.Log;
import com.calclab.suco.client.ioc.Provider;
import com.calclab.suco.client.listener.Listener;
@@ -267,8 +266,9 @@
new Listener<StateToken>() {
public void onEvent(final StateToken token) {
if (permitedExtensions != null) {
- Log.info("Permited extensions (in dev): " + permitedExtensions);
fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
+ } else {
+ fileUploaderProvider.get().resetPermittedExtensions();
}
fileUploaderProvider.get().show();
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -39,7 +39,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.platf.client.tool.ToolSelector;
-import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
+import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
import org.ourproject.kune.platf.client.ui.rate.RateIt;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.editor.TextEditor;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -32,23 +32,15 @@
import org.ourproject.kune.platf.client.state.StateManagerDefault;
import org.ourproject.kune.platf.client.tool.ToolSelector;
import org.ourproject.kune.platf.client.tool.ToolSelectorPresenter;
-import org.ourproject.kune.platf.client.ui.QuickTipsHelper;
-import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
-import org.ourproject.kune.platf.client.ui.dialogs.FileUploaderDialog;
-import org.ourproject.kune.platf.client.ui.rate.RateIt;
-import org.ourproject.kune.platf.client.ui.rate.RateItPanel;
-import org.ourproject.kune.platf.client.ui.rate.RateItPresenter;
-import org.ourproject.kune.platf.client.ui.rate.RatePanel;
-import org.ourproject.kune.platf.client.ui.rate.RatePresenter;
+import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
+import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploaderDialog;
+import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploaderPresenter;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPanel;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigatorPresenter;
import org.ourproject.kune.workspace.client.editor.TextEditor;
import org.ourproject.kune.workspace.client.editor.TextEditorPanel;
import org.ourproject.kune.workspace.client.editor.TextEditorPresenter;
-import org.ourproject.kune.workspace.client.entitylogo.EntityLogo;
-import org.ourproject.kune.workspace.client.entitylogo.EntityLogoPanel;
-import org.ourproject.kune.workspace.client.entitylogo.EntityLogoPresenter;
import org.ourproject.kune.workspace.client.i18n.I18nTranslator;
import org.ourproject.kune.workspace.client.i18n.I18nTranslatorPresenter;
import org.ourproject.kune.workspace.client.i18n.I18nTranslatorView;
@@ -61,8 +53,6 @@
import org.ourproject.kune.workspace.client.licensechoose.LicenseChoose;
import org.ourproject.kune.workspace.client.licensechoose.LicenseChoosePanel;
import org.ourproject.kune.workspace.client.licensechoose.LicenseChoosePresenter;
-import org.ourproject.kune.workspace.client.licensefoot.EntityLicensePanel;
-import org.ourproject.kune.workspace.client.licensefoot.EntityLicensePresenter;
import org.ourproject.kune.workspace.client.newgroup.NewGroup;
import org.ourproject.kune.workspace.client.newgroup.NewGroupPanel;
import org.ourproject.kune.workspace.client.newgroup.NewGroupPresenter;
@@ -82,63 +72,11 @@
import org.ourproject.kune.workspace.client.signin.SignInPresenter;
import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.site.SiteToken;
-import org.ourproject.kune.workspace.client.site.msg.SiteMessage;
-import org.ourproject.kune.workspace.client.site.msg.SiteMessagePanel;
-import org.ourproject.kune.workspace.client.site.msg.SiteMessagePresenter;
-import org.ourproject.kune.workspace.client.site.msg.SiteMessageView;
import org.ourproject.kune.workspace.client.site.rpc.UserService;
import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync;
-import org.ourproject.kune.workspace.client.sitebar.sitelogo.SiteLogo;
-import org.ourproject.kune.workspace.client.sitebar.sitelogo.SiteLogoPanel;
-import org.ourproject.kune.workspace.client.sitebar.sitelogo.SiteLogoPresenter;
-import org.ourproject.kune.workspace.client.sitebar.sitenewgroup.SiteNewGroupLink;
-import org.ourproject.kune.workspace.client.sitebar.sitenewgroup.SiteNewGroupLinkPanel;
-import org.ourproject.kune.workspace.client.sitebar.sitenewgroup.SiteNewGroupLinkPresenter;
-import org.ourproject.kune.workspace.client.sitebar.siteoptions.SiteOptions;
-import org.ourproject.kune.workspace.client.sitebar.siteoptions.SiteOptionsPanel;
-import org.ourproject.kune.workspace.client.sitebar.siteoptions.SiteOptionsPresenter;
-import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgress;
-import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgressPanel;
-import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgressPresenter;
-import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
-import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLinkPanel;
-import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLinkPresenter;
-import org.ourproject.kune.workspace.client.sitebar.sitesearch.SiteSearch;
-import org.ourproject.kune.workspace.client.sitebar.sitesearch.SiteSearchPanel;
-import org.ourproject.kune.workspace.client.sitebar.sitesearch.SiteSearchPresenter;
-import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignInLink;
-import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignInLinkPanel;
-import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignInLinkPresenter;
-import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink;
-import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLinkPanel;
-import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLinkPresenter;
-import org.ourproject.kune.workspace.client.sitebar.siteusermenu.SiteUserMenu;
-import org.ourproject.kune.workspace.client.sitebar.siteusermenu.SiteUserMenuPanel;
-import org.ourproject.kune.workspace.client.sitebar.siteusermenu.SiteUserMenuPresenter;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummary;
-import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummaryPanel;
-import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummaryPresenter;
-import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummaryView;
-import org.ourproject.kune.workspace.client.socialnet.ParticipationSummary;
-import org.ourproject.kune.workspace.client.socialnet.ParticipationSummaryPanel;
-import org.ourproject.kune.workspace.client.socialnet.ParticipationSummaryPresenter;
-import org.ourproject.kune.workspace.client.socialnet.ParticipationSummaryView;
-import org.ourproject.kune.workspace.client.summary.GroupSummary;
-import org.ourproject.kune.workspace.client.summary.GroupSummaryPanel;
-import org.ourproject.kune.workspace.client.summary.GroupSummaryPresenter;
-import org.ourproject.kune.workspace.client.summary.GroupSummaryView;
-import org.ourproject.kune.workspace.client.tags.TagsSummary;
-import org.ourproject.kune.workspace.client.tags.TagsSummaryPanel;
-import org.ourproject.kune.workspace.client.tags.TagsSummaryPresenter;
-import org.ourproject.kune.workspace.client.themes.WsThemePanel;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import org.ourproject.kune.workspace.client.title.EntitySubTitle;
-import org.ourproject.kune.workspace.client.title.EntitySubTitlePanel;
-import org.ourproject.kune.workspace.client.title.EntitySubTitlePresenter;
import org.ourproject.kune.workspace.client.title.EntityTitle;
-import org.ourproject.kune.workspace.client.title.EntityTitlePanel;
-import org.ourproject.kune.workspace.client.title.EntityTitlePresenter;
import com.calclab.suco.client.ioc.decorator.Singleton;
import com.calclab.suco.client.ioc.module.AbstractModule;
@@ -255,15 +193,8 @@
}
});
- register(Singleton.class, new Factory<WorkspaceSkeleton>(WorkspaceSkeleton.class) {
- public WorkspaceSkeleton create() {
- return new WorkspaceSkeleton();
- }
- });
-
AsyncCallbackSimple.init($(KuneErrorHandler.class));
- final WorkspaceSkeleton ws = $(WorkspaceSkeleton.class);
register(Singleton.class, new Factory<Application>(Application.class) {
public Application create() {
return new ApplicationDefault($(Session.class));
@@ -274,225 +205,10 @@
}
});
- register(ApplicationComponentGroup.class, new Factory<QuickTipsHelper>(QuickTipsHelper.class) {
- public QuickTipsHelper create() {
- return new QuickTipsHelper();
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteProgress>(SiteProgress.class) {
- public SiteProgress create() {
- final SiteProgressPresenter presenter = new SiteProgressPresenter();
- final SiteProgressPanel panel = new SiteProgressPanel(presenter, $$(SitePublicSpaceLink.class));
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<Site>(Site.class) {
- public Site create() {
- return new Site(i18n, $(SiteProgress.class), $$(SiteMessage.class));
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SitePublicSpaceLink>(SitePublicSpaceLink.class) {
- public SitePublicSpaceLink create() {
- final SitePublicSpaceLinkPresenter presenter = new SitePublicSpaceLinkPresenter($(StateManager.class));
- final SitePublicSpaceLinkPanel panel = new SitePublicSpaceLinkPanel(presenter, ws, i18n,
- $(Images.class));
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteMessage>(SiteMessage.class) {
- public SiteMessage create() {
- final SiteMessagePresenter siteMessagePresenter = new SiteMessagePresenter();
- final SiteMessageView siteMessageView = new SiteMessagePanel(siteMessagePresenter, true, i18n);
- siteMessagePresenter.init(siteMessageView);
- return siteMessagePresenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteUserMenu>(SiteUserMenu.class) {
- public SiteUserMenu create() {
- final SiteUserMenuPresenter presenter = new SiteUserMenuPresenter($(Session.class),
- $(StateManager.class));
- final SiteUserMenuPanel panel = new SiteUserMenuPanel(presenter, ws, i18n);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteSignInLink>(SiteSignInLink.class) {
- public SiteSignInLink create() {
- final SiteSignInLinkPresenter presenter = new SiteSignInLinkPresenter($(Session.class));
- final SiteSignInLinkPanel panel = new SiteSignInLinkPanel(presenter, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteSignOutLink>(SiteSignOutLink.class) {
- public SiteSignOutLink create() {
- final SiteSignOutLinkPresenter presenter = new SiteSignOutLinkPresenter($(Session.class),
- $$(UserServiceAsync.class), $$(KuneErrorHandler.class));
- final SiteSignOutLinkPanel panel = new SiteSignOutLinkPanel(presenter, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteNewGroupLink>(SiteNewGroupLink.class) {
- public SiteNewGroupLink create() {
- final SiteNewGroupLinkPresenter presenter = new SiteNewGroupLinkPresenter();
- final SiteNewGroupLinkPanel panel = new SiteNewGroupLinkPanel(presenter, ws, i18n);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteOptions>(SiteOptions.class) {
- public SiteOptions create() {
- final SiteOptionsPresenter presenter = new SiteOptionsPresenter();
- final SiteOptionsPanel panel = new SiteOptionsPanel(presenter, ws, i18n, $$(I18nTranslator.class));
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteSearch>(SiteSearch.class) {
- public SiteSearch create() {
- final SiteSearchPresenter presenter = new SiteSearchPresenter($$(SiteSearcher.class));
- final SiteSearchPanel panel = new SiteSearchPanel(presenter, ws, i18n);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<SiteLogo>(SiteLogo.class) {
- public SiteLogo create() {
- final SiteLogoPresenter presenter = new SiteLogoPresenter($(Session.class));
- final SiteLogoPanel panel = new SiteLogoPanel(presenter, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<EntityLogo>(EntityLogo.class) {
- public EntityLogo create() {
- final EntityLogoPresenter presenter = new EntityLogoPresenter($(StateManager.class),
- $(WsThemePresenter.class));
- final EntityLogoPanel panel = new EntityLogoPanel(i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<WsThemePresenter>(WsThemePresenter.class) {
- public WsThemePresenter create() {
- final WsThemePresenter presenter = new WsThemePresenter($(Session.class), $$(GroupServiceAsync.class),
- $(StateManager.class));
- final WsThemePanel panel = new WsThemePanel(ws, presenter, i18n);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<EntityTitle>(EntityTitle.class) {
- public EntityTitle create() {
- final EntityTitlePresenter presenter = new EntityTitlePresenter(i18n, $(KuneErrorHandler.class),
- $(StateManager.class), $(Session.class), $$(ContentServiceAsync.class),
- $$(ContextNavigator.class));
- final EntityTitlePanel panel = new EntityTitlePanel(ws, presenter);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<EntitySubTitle>(EntitySubTitle.class) {
- public EntitySubTitle create() {
- final EntitySubTitlePresenter presenter = new EntitySubTitlePresenter(i18n, $(StateManager.class));
- final EntitySubTitlePanel panel = new EntitySubTitlePanel(presenter, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<EntityLicensePresenter>(EntityLicensePresenter.class) {
- public EntityLicensePresenter create() {
- final EntityLicensePresenter presenter = new EntityLicensePresenter($(StateManager.class));
- final EntityLicensePanel panel = new EntityLicensePanel(presenter, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<RatePresenter>(RatePresenter.class) {
- public RatePresenter create() {
- final RatePresenter presenter = new RatePresenter($(StateManager.class));
- final RatePanel panel = new RatePanel(null, null, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<RateIt>(RateIt.class) {
- public RateIt create() {
- final RateItPresenter presenter = new RateItPresenter(i18n, $(Session.class),
- $$(ContentServiceAsync.class), $(StateManager.class));
- final RateItPanel panel = new RateItPanel(presenter, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<GroupMembersSummary>(GroupMembersSummary.class) {
- public GroupMembersSummary create() {
- final GroupMembersSummaryPresenter presenter = new GroupMembersSummaryPresenter(i18n,
- $(StateManager.class), $(ImageUtils.class), $(Session.class),
- $$(SocialNetworkServiceAsync.class), $$(GroupLiveSearcher.class), $(WsThemePresenter.class));
- final GroupMembersSummaryView view = new GroupMembersSummaryPanel(presenter, i18n, ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<GroupSummary>(GroupSummary.class) {
- public GroupSummary create() {
- final GroupSummaryPresenter presenter = new GroupSummaryPresenter($(StateManager.class),
- $(WsThemePresenter.class));
- final GroupSummaryView view = new GroupSummaryPanel(presenter, i18n, ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<ParticipationSummary>(ParticipationSummary.class) {
- public ParticipationSummary create() {
- final ParticipationSummaryPresenter presenter = new ParticipationSummaryPresenter(i18n,
- $(StateManager.class), $(ImageUtils.class), $(Session.class),
- $$(SocialNetworkServiceAsync.class), $(WsThemePresenter.class));
- final ParticipationSummaryView view = new ParticipationSummaryPanel(presenter, i18n, ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(ApplicationComponentGroup.class, new Factory<TagsSummary>(TagsSummary.class) {
- public TagsSummary create() {
- final TagsSummaryPresenter presenter = new TagsSummaryPresenter($(Session.class),
- $$(SiteSearcher.class), $(StateManager.class), $(WsThemePresenter.class));
- final TagsSummaryPanel panel = new TagsSummaryPanel(presenter, i18n, ws);
- presenter.init(panel);
- return presenter;
- }
- });
-
register(Singleton.class, new Factory<SiteSearcher>(SiteSearcher.class) {
public SiteSearcher create() {
final SiteSearcherPresenter presenter = new SiteSearcherPresenter($$(StateManager.class));
- final SiteSearcherView view = new SiteSearcherPanel(presenter, i18n, ws);
+ final SiteSearcherView view = new SiteSearcherPanel(presenter, i18n, $(WorkspaceSkeleton.class));
presenter.init(view);
return presenter;
}
@@ -502,7 +218,8 @@
public I18nTranslator create() {
final I18nTranslatorPresenter presenter = new I18nTranslatorPresenter($(Session.class),
$(I18nServiceAsync.class), i18n);
- final I18nTranslatorView view = new I18nTranslatorPanel(presenter, i18n, $(LanguageSelector.class), ws);
+ final I18nTranslatorView view = new I18nTranslatorPanel(presenter, i18n, $(LanguageSelector.class),
+ $(WorkspaceSkeleton.class));
presenter.init(view);
return presenter;
}
@@ -512,7 +229,7 @@
public SignIn create() {
final SignInPresenter presenter = new SignInPresenter($(Session.class), $(StateManager.class), i18n,
$(UserServiceAsync.class));
- final SignInPanel view = new SignInPanel(presenter, i18n, ws);
+ final SignInPanel view = new SignInPanel(presenter, i18n, $(WorkspaceSkeleton.class));
presenter.init(view);
return presenter;
}
@@ -566,7 +283,7 @@
register(Singleton.class, new Factory<TextEditor>(TextEditor.class) {
public TextEditor create() {
final TextEditorPresenter presenter = new TextEditorPresenter(null, true);
- final TextEditorPanel panel = new TextEditorPanel(presenter, i18n, ws);
+ final TextEditorPanel panel = new TextEditorPanel(presenter, i18n, $(WorkspaceSkeleton.class));
presenter.init(panel);
return presenter;
}
@@ -583,7 +300,7 @@
register(Singleton.class, new Factory<ActionManager>(ActionManager.class) {
public ActionManager create() {
- return new ActionManager(ws);
+ return new ActionManager($(WorkspaceSkeleton.class));
}
});
@@ -614,7 +331,8 @@
register(Singleton.class, new Factory<ContextNavigator>(ContextNavigator.class) {
public ContextNavigator create() {
final ActionToolbarPanel contextNavigatorToolbar = new ActionToolbarPanel(
- ActionToolbarPanel.Position.context, $(Session.class), $$(ActionManager.class), ws);
+ ActionToolbarPanel.Position.context, $(Session.class), $$(ActionManager.class),
+ $(WorkspaceSkeleton.class));
final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contextNavigatorToolbar,
$(ContextActionRegistry.class));
@@ -622,8 +340,8 @@
$(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class),
$(ContentIconsRegistry.class), $(DragDropContentRegistry.class),
$(ContextActionRegistry.class), toolbar);
- final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n, ws,
- $(ActionManager.class));
+ final ContextNavigatorPanel panel = new ContextNavigatorPanel(presenter, i18n,
+ $(WorkspaceSkeleton.class), $(ActionManager.class));
presenter.init(panel);
return presenter;
}
@@ -631,8 +349,10 @@
register(Singleton.class, new Factory<FileUploader>(FileUploader.class) {
public FileUploader create() {
- final FileUploaderDialog panel = new FileUploaderDialog(i18n, ws, $(Session.class));
- return panel;
+ final FileUploaderPresenter presenter = new FileUploaderPresenter($(Session.class));
+ final FileUploaderDialog panel = new FileUploaderDialog(presenter, i18n, $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
}
});
@@ -655,31 +375,6 @@
}
});
- // $(SiteProgress.class);
- // $(Site.class);
- // $(SitePublicSpaceLink.class);
- // $(SiteMessage.class);
- // $(SiteUserMenu.class);
- // $(SiteSignInLink.class);
- // $(SiteSignOutLink.class);
- // $(SiteNewGroupLink.class);
- // $(SiteOptions.class);
- // $(SiteSearch.class);
- // $(SiteLogo.class);
- //
- // $(GroupMembersSummary.class);
- // $(ParticipationSummary.class);
- // $(TagsSummary.class);
- // $(GroupSummary.class);
- //
- // $(EntityLogo.class);
- // $(EntityTitle.class);
- // $(EntitySubTitle.class);
- // $(WsThemePresenter.class);
- // $(EntityLicensePresenter.class);
- // $(RateIt.class);
- // $(RatePresenter.class);
-
$(ApplicationComponentGroup.class).createAll();
$(ToolGroup.class).createAll();
$(Application.class).start();
Added: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneWorkspaceModule.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -0,0 +1,331 @@
+package org.ourproject.kune.platf.client.services;
+
+import org.ourproject.kune.platf.client.app.ApplicationComponentGroup;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.rpc.GroupServiceAsync;
+import org.ourproject.kune.platf.client.rpc.SocialNetworkServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.QuickTipsHelper;
+import org.ourproject.kune.platf.client.ui.rate.RateIt;
+import org.ourproject.kune.platf.client.ui.rate.RateItPanel;
+import org.ourproject.kune.platf.client.ui.rate.RateItPresenter;
+import org.ourproject.kune.platf.client.ui.rate.RatePanel;
+import org.ourproject.kune.platf.client.ui.rate.RatePresenter;
+import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
+import org.ourproject.kune.workspace.client.entitylogo.EntityLogo;
+import org.ourproject.kune.workspace.client.entitylogo.EntityLogoPanel;
+import org.ourproject.kune.workspace.client.entitylogo.EntityLogoPresenter;
+import org.ourproject.kune.workspace.client.i18n.I18nTranslator;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.licensefoot.EntityLicensePanel;
+import org.ourproject.kune.workspace.client.licensefoot.EntityLicensePresenter;
+import org.ourproject.kune.workspace.client.search.GroupLiveSearcher;
+import org.ourproject.kune.workspace.client.search.SiteSearcher;
+import org.ourproject.kune.workspace.client.site.Site;
+import org.ourproject.kune.workspace.client.site.msg.SiteMessage;
+import org.ourproject.kune.workspace.client.site.msg.SiteMessagePanel;
+import org.ourproject.kune.workspace.client.site.msg.SiteMessagePresenter;
+import org.ourproject.kune.workspace.client.site.msg.SiteMessageView;
+import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync;
+import org.ourproject.kune.workspace.client.sitebar.sitelogo.SiteLogo;
+import org.ourproject.kune.workspace.client.sitebar.sitelogo.SiteLogoPanel;
+import org.ourproject.kune.workspace.client.sitebar.sitelogo.SiteLogoPresenter;
+import org.ourproject.kune.workspace.client.sitebar.sitenewgroup.SiteNewGroupLink;
+import org.ourproject.kune.workspace.client.sitebar.sitenewgroup.SiteNewGroupLinkPanel;
+import org.ourproject.kune.workspace.client.sitebar.sitenewgroup.SiteNewGroupLinkPresenter;
+import org.ourproject.kune.workspace.client.sitebar.siteoptions.SiteOptions;
+import org.ourproject.kune.workspace.client.sitebar.siteoptions.SiteOptionsPanel;
+import org.ourproject.kune.workspace.client.sitebar.siteoptions.SiteOptionsPresenter;
+import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgress;
+import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgressPanel;
+import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgressPresenter;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLinkPanel;
+import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLinkPresenter;
+import org.ourproject.kune.workspace.client.sitebar.sitesearch.SiteSearch;
+import org.ourproject.kune.workspace.client.sitebar.sitesearch.SiteSearchPanel;
+import org.ourproject.kune.workspace.client.sitebar.sitesearch.SiteSearchPresenter;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignInLink;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignInLinkPanel;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignInLinkPresenter;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLink;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLinkPanel;
+import org.ourproject.kune.workspace.client.sitebar.sitesign.SiteSignOutLinkPresenter;
+import org.ourproject.kune.workspace.client.sitebar.siteusermenu.SiteUserMenu;
+import org.ourproject.kune.workspace.client.sitebar.siteusermenu.SiteUserMenuPanel;
+import org.ourproject.kune.workspace.client.sitebar.siteusermenu.SiteUserMenuPresenter;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummary;
+import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummaryPanel;
+import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummaryPresenter;
+import org.ourproject.kune.workspace.client.socialnet.GroupMembersSummaryView;
+import org.ourproject.kune.workspace.client.socialnet.ParticipationSummary;
+import org.ourproject.kune.workspace.client.socialnet.ParticipationSummaryPanel;
+import org.ourproject.kune.workspace.client.socialnet.ParticipationSummaryPresenter;
+import org.ourproject.kune.workspace.client.socialnet.ParticipationSummaryView;
+import org.ourproject.kune.workspace.client.summary.GroupSummary;
+import org.ourproject.kune.workspace.client.summary.GroupSummaryPanel;
+import org.ourproject.kune.workspace.client.summary.GroupSummaryPresenter;
+import org.ourproject.kune.workspace.client.summary.GroupSummaryView;
+import org.ourproject.kune.workspace.client.tags.TagsSummary;
+import org.ourproject.kune.workspace.client.tags.TagsSummaryPanel;
+import org.ourproject.kune.workspace.client.tags.TagsSummaryPresenter;
+import org.ourproject.kune.workspace.client.themes.WsThemePanel;
+import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
+import org.ourproject.kune.workspace.client.title.EntitySubTitle;
+import org.ourproject.kune.workspace.client.title.EntitySubTitlePanel;
+import org.ourproject.kune.workspace.client.title.EntitySubTitlePresenter;
+import org.ourproject.kune.workspace.client.title.EntityTitle;
+import org.ourproject.kune.workspace.client.title.EntityTitlePanel;
+import org.ourproject.kune.workspace.client.title.EntityTitlePresenter;
+
+import com.calclab.suco.client.ioc.module.AbstractModule;
+import com.calclab.suco.client.ioc.module.Factory;
+
+public class KuneWorkspaceModule extends AbstractModule {
+ @Override
+ protected void onLoad() {
+
+ register(ApplicationComponentGroup.class, new Factory<WorkspaceSkeleton>(WorkspaceSkeleton.class) {
+ public WorkspaceSkeleton create() {
+ return new WorkspaceSkeleton();
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<QuickTipsHelper>(QuickTipsHelper.class) {
+ public QuickTipsHelper create() {
+ return new QuickTipsHelper();
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteProgress>(SiteProgress.class) {
+ public SiteProgress create() {
+ final SiteProgressPresenter presenter = new SiteProgressPresenter();
+ final SiteProgressPanel panel = new SiteProgressPanel(presenter, $$(SitePublicSpaceLink.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<Site>(Site.class) {
+ public Site create() {
+ return new Site($(I18nUITranslationService.class), $(SiteProgress.class), $$(SiteMessage.class));
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SitePublicSpaceLink>(SitePublicSpaceLink.class) {
+ public SitePublicSpaceLink create() {
+ final SitePublicSpaceLinkPresenter presenter = new SitePublicSpaceLinkPresenter($(StateManager.class));
+ final SitePublicSpaceLinkPanel panel = new SitePublicSpaceLinkPanel(presenter,
+ $(WorkspaceSkeleton.class), $(I18nUITranslationService.class), $(Images.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteMessage>(SiteMessage.class) {
+ public SiteMessage create() {
+ final SiteMessagePresenter siteMessagePresenter = new SiteMessagePresenter();
+ final SiteMessageView siteMessageView = new SiteMessagePanel(siteMessagePresenter, true,
+ $(I18nUITranslationService.class));
+ siteMessagePresenter.init(siteMessageView);
+ return siteMessagePresenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteUserMenu>(SiteUserMenu.class) {
+ public SiteUserMenu create() {
+ final SiteUserMenuPresenter presenter = new SiteUserMenuPresenter($(Session.class),
+ $(StateManager.class));
+ final SiteUserMenuPanel panel = new SiteUserMenuPanel(presenter, $(WorkspaceSkeleton.class),
+ $(I18nUITranslationService.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteSignInLink>(SiteSignInLink.class) {
+ public SiteSignInLink create() {
+ final SiteSignInLinkPresenter presenter = new SiteSignInLinkPresenter($(Session.class));
+ final SiteSignInLinkPanel panel = new SiteSignInLinkPanel(presenter, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteSignOutLink>(SiteSignOutLink.class) {
+ public SiteSignOutLink create() {
+ final SiteSignOutLinkPresenter presenter = new SiteSignOutLinkPresenter($(Session.class),
+ $$(UserServiceAsync.class), $$(KuneErrorHandler.class));
+ final SiteSignOutLinkPanel panel = new SiteSignOutLinkPanel(presenter,
+ $(I18nUITranslationService.class), $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteNewGroupLink>(SiteNewGroupLink.class) {
+ public SiteNewGroupLink create() {
+ final SiteNewGroupLinkPresenter presenter = new SiteNewGroupLinkPresenter();
+ final SiteNewGroupLinkPanel panel = new SiteNewGroupLinkPanel(presenter, $(WorkspaceSkeleton.class),
+ $(I18nUITranslationService.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteOptions>(SiteOptions.class) {
+ public SiteOptions create() {
+ final SiteOptionsPresenter presenter = new SiteOptionsPresenter();
+ final SiteOptionsPanel panel = new SiteOptionsPanel(presenter, $(WorkspaceSkeleton.class),
+ $(I18nUITranslationService.class), $$(I18nTranslator.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteSearch>(SiteSearch.class) {
+ public SiteSearch create() {
+ final SiteSearchPresenter presenter = new SiteSearchPresenter($$(SiteSearcher.class));
+ final SiteSearchPanel panel = new SiteSearchPanel(presenter, $(WorkspaceSkeleton.class),
+ $(I18nUITranslationService.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteLogo>(SiteLogo.class) {
+ public SiteLogo create() {
+ final SiteLogoPresenter presenter = new SiteLogoPresenter($(Session.class));
+ final SiteLogoPanel panel = new SiteLogoPanel(presenter, $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<EntityLogo>(EntityLogo.class) {
+ public EntityLogo create() {
+ final EntityLogoPresenter presenter = new EntityLogoPresenter($(StateManager.class),
+ $(WsThemePresenter.class));
+ final EntityLogoPanel panel = new EntityLogoPanel($(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<WsThemePresenter>(WsThemePresenter.class) {
+ public WsThemePresenter create() {
+ final WsThemePresenter presenter = new WsThemePresenter($(Session.class), $$(GroupServiceAsync.class),
+ $(StateManager.class));
+ final WsThemePanel panel = new WsThemePanel($(WorkspaceSkeleton.class), presenter,
+ $(I18nUITranslationService.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<EntityTitle>(EntityTitle.class) {
+ public EntityTitle create() {
+ final EntityTitlePresenter presenter = new EntityTitlePresenter($(I18nUITranslationService.class),
+ $(KuneErrorHandler.class), $(StateManager.class), $(Session.class),
+ $$(ContentServiceAsync.class), $$(ContextNavigator.class));
+ final EntityTitlePanel panel = new EntityTitlePanel($(WorkspaceSkeleton.class), presenter);
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<EntitySubTitle>(EntitySubTitle.class) {
+ public EntitySubTitle create() {
+ final EntitySubTitlePresenter presenter = new EntitySubTitlePresenter(
+ $(I18nUITranslationService.class), $(StateManager.class));
+ final EntitySubTitlePanel panel = new EntitySubTitlePanel(presenter, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<EntityLicensePresenter>(EntityLicensePresenter.class) {
+ public EntityLicensePresenter create() {
+ final EntityLicensePresenter presenter = new EntityLicensePresenter($(StateManager.class));
+ final EntityLicensePanel panel = new EntityLicensePanel(presenter, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<RatePresenter>(RatePresenter.class) {
+ public RatePresenter create() {
+ final RatePresenter presenter = new RatePresenter($(StateManager.class));
+ final RatePanel panel = new RatePanel(null, null, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<RateIt>(RateIt.class) {
+ public RateIt create() {
+ final RateItPresenter presenter = new RateItPresenter($(I18nUITranslationService.class),
+ $(Session.class), $$(ContentServiceAsync.class), $(StateManager.class));
+ final RateItPanel panel = new RateItPanel(presenter, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<GroupMembersSummary>(GroupMembersSummary.class) {
+ public GroupMembersSummary create() {
+ final GroupMembersSummaryPresenter presenter = new GroupMembersSummaryPresenter(
+ $(I18nUITranslationService.class), $(StateManager.class), $(ImageUtils.class),
+ $(Session.class), $$(SocialNetworkServiceAsync.class), $$(GroupLiveSearcher.class),
+ $(WsThemePresenter.class));
+ final GroupMembersSummaryView view = new GroupMembersSummaryPanel(presenter,
+ $(I18nUITranslationService.class), $(WorkspaceSkeleton.class));
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<GroupSummary>(GroupSummary.class) {
+ public GroupSummary create() {
+ final GroupSummaryPresenter presenter = new GroupSummaryPresenter($(StateManager.class),
+ $(WsThemePresenter.class));
+ final GroupSummaryView view = new GroupSummaryPanel(presenter, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<ParticipationSummary>(ParticipationSummary.class) {
+ public ParticipationSummary create() {
+ final ParticipationSummaryPresenter presenter = new ParticipationSummaryPresenter(
+ $(I18nUITranslationService.class), $(StateManager.class), $(ImageUtils.class),
+ $(Session.class), $$(SocialNetworkServiceAsync.class), $(WsThemePresenter.class));
+ final ParticipationSummaryView view = new ParticipationSummaryPanel(presenter,
+ $(I18nUITranslationService.class), $(WorkspaceSkeleton.class));
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<TagsSummary>(TagsSummary.class) {
+ public TagsSummary create() {
+ final TagsSummaryPresenter presenter = new TagsSummaryPresenter($(Session.class),
+ $$(SiteSearcher.class), $(StateManager.class), $(WsThemePresenter.class));
+ final TagsSummaryPanel panel = new TagsSummaryPanel(presenter, $(I18nUITranslationService.class),
+ $(WorkspaceSkeleton.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ }
+}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -1,15 +0,0 @@
-package org.ourproject.kune.platf.client.ui.dialogs;
-
-public interface FileUploader {
-
- public static final String USERHASH = "userhash";
- public static final String CURRENT_STATE_TOKEN = "currentStateToken";
- public static final String FILENAME = "filename";
-
- void hide();
-
- void setPermittedExtensions(String extensions);
-
- void show();
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -1,141 +0,0 @@
-package org.ourproject.kune.platf.client.ui.dialogs;
-
-import org.ourproject.kune.platf.client.state.Session;
-import org.ourproject.kune.platf.client.ui.KuneStringUtils;
-import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import org.ourproject.kune.workspace.client.site.Site;
-import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-
-import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DeferredCommand;
-import com.gwtext.client.core.EventObject;
-import com.gwtext.client.core.UrlParam;
-import com.gwtext.client.widgets.Button;
-import com.gwtext.client.widgets.ToolbarButton;
-import com.gwtext.client.widgets.event.ButtonListenerAdapter;
-import com.gwtextux.client.widgets.upload.UploadDialog;
-import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter;
-
-public class FileUploaderDialog implements FileUploader {
-
- protected static final String SITE_FILE_UPLOADER = "k-site-file-uploader";
-
- private static final String URL = "/kune/servlets/FileUploadManager";
-
- private UploadDialog dialog;
- private ToolbarButton traybarButton;
- private final I18nUITranslationService i18n;
- private final WorkspaceSkeleton ws;
- private final Session session;
-
- public FileUploaderDialog(final I18nUITranslationService i18n, final WorkspaceSkeleton ws, final Session session) {
- this.i18n = i18n;
- this.ws = ws;
- this.session = session;
- createDialog(false);
- }
-
- public void hide() {
- dialog.hide();
- }
-
- public void setPermittedExtensions(final String extensions) {
- DeferredCommand.addCommand(new Command() {
- public void execute() {
- Log.error("Debugging setPerm issue, current perms: " + dialog.getPermittedExtensions());
- final Object[] objs = KuneStringUtils.splitTags(extensions).toArray();
- final String[] exts = new String[objs.length];
- for (int i = 0; i < objs.length; i++) {
- exts[i] = (String) objs[i];
- }
- dialog.setPermittedExtensions(exts);
- }
- });
- }
-
- public void show() {
- if (traybarButton == null) {
- traybarButton = new ToolbarButton();
- traybarButton.setTooltip(i18n.t("Show/hide uploader window"));
- traybarButton.setIcon("images/nav/upload.png");
- traybarButton.addListener(new ButtonListenerAdapter() {
- @Override
- public void onClick(final Button button, final EventObject e) {
- if (dialog.isVisible()) {
- dialog.hide();
- } else {
- dialog.show();
- }
- }
- });
- ws.getSiteTraybar().addButton(traybarButton);
- }
- if (dialog == null) {
- createDialog(true);
- } else {
- dialog.show();
- }
- }
-
- private void createDialog(final boolean show) {
- DeferredCommand.addCommand(new Command() {
- public void execute() {
- dialog = new UploadDialog(i18n.t("File uploader"), false, true);
- dialog.setId(SITE_FILE_UPLOADER);
- // dialog.setUploadAutostart(true);
- dialog.setResetOnHide(false);
- dialog.addListener(new UploadDialogListenerAdapter() {
- @Override
- public void onFileUploadStart(final UploadDialog source, final String filename) {
- setUploadParams(session.getUserHash(), session.getCurrentState().getStateToken().toString(),
- filename);
- }
-
- @Override
- public void onUploadComplete(final UploadDialog source) {
- if (!dialog.isVisible()) {
- Site.info(i18n.t("Upload completed"));
- traybarButton.destroy();
- traybarButton = null;
- }
- }
-
- @Override
- public void onUploadError(final UploadDialog source, final String filename,
- final JavaScriptObject data) {
- showError();
- }
-
- @Override
- public void onUploadFailed(final UploadDialog source, final String filename) {
- showError();
- }
-
- private void setUploadParams(final String userhash, final String currentStateToken,
- final String filename) {
- Log.info("Setting upload params");
- final UrlParam param[] = new UrlParam[3];
- param[0] = new UrlParam(USERHASH, userhash);
- param[1] = new UrlParam(CURRENT_STATE_TOKEN, currentStateToken);
- param[2] = new UrlParam(FILENAME, filename);
- dialog.setBaseParams(param);
- dialog.setPostVarName(filename);
- }
-
- private void showError() {
- if (!dialog.isVisible()) {
- Site.veryImportant(i18n.t("Error uploading"));
- }
- }
-
- });
- dialog.setUrl(URL);
- if (show) {
- dialog.show();
- }
- }
- });
- }
-}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploader.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploader.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploader.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.platf.client.ui.dialogs.upload;
+
+public interface FileUploader {
+
+ public static final String USERHASH = "userhash";
+ public static final String CURRENT_STATE_TOKEN = "currentStateToken";
+ public static final String FILENAME = "filename";
+
+ boolean hasUploadingFiles();
+
+ void hide();
+
+ void resetPermittedExtensions();
+
+ void setPermittedExtensions(String extensions);
+
+ void show();
+
+}
Copied: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java (from rev 881, trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderDialog.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -0,0 +1,167 @@
+package org.ourproject.kune.platf.client.ui.dialogs.upload;
+
+import org.ourproject.kune.platf.client.ui.KuneStringUtils;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.site.Site;
+import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.DeferredCommand;
+import com.gwtext.client.core.EventObject;
+import com.gwtext.client.core.UrlParam;
+import com.gwtext.client.widgets.Button;
+import com.gwtext.client.widgets.ToolbarButton;
+import com.gwtext.client.widgets.event.ButtonListenerAdapter;
+import com.gwtextux.client.widgets.upload.UploadDialog;
+import com.gwtextux.client.widgets.upload.UploadDialogListenerAdapter;
+
+public class FileUploaderDialog implements FileUploaderView {
+
+ protected static final String SITE_FILE_UPLOADER = "k-site-file-uploader";
+
+ private static final String URL = "/kune/servlets/FileUploadManager";
+
+ private UploadDialog dialog;
+ private ToolbarButton traybarButton;
+ private final I18nUITranslationService i18n;
+ private final WorkspaceSkeleton ws;
+ private final FileUploaderPresenter presenter;
+
+ public FileUploaderDialog(final FileUploaderPresenter presenter, final I18nUITranslationService i18n,
+ final WorkspaceSkeleton ws) {
+ this.presenter = presenter;
+ this.i18n = i18n;
+ this.ws = ws;
+ createDialog(false);
+ }
+
+ public void destroy() {
+ if (hasUploadingFiles()) {
+ dialog.stopUpload();
+ Site.important(i18n.t("Upload canceled after sign out"));
+ }
+ if (dialog != null) {
+ dialog.destroy();
+ dialog = null;
+ }
+ if (traybarButton != null) {
+ traybarButton.destroy();
+ traybarButton = null;
+ }
+ }
+
+ public boolean hasUploadingFiles() {
+ return dialog.hasUnuploadedFiles();
+ }
+
+ public void hide() {
+ dialog.hide();
+ }
+
+ public void resetPermittedExtensions() {
+ final String[] extensions = {};
+ setPermittedExtensions(extensions);
+ }
+
+ public void setPermittedExtensions(final String extensions) {
+ final Object[] objs = KuneStringUtils.splitTags(extensions).toArray();
+ final String[] exts = new String[objs.length];
+ for (int i = 0; i < objs.length; i++) {
+ exts[i] = (String) objs[i];
+ }
+ setPermittedExtensions(exts);
+ }
+
+ public void setUploadParams(final String userhash, final String currentStateToken) {
+ // Warning take into account param[size]
+ final UrlParam param[] = new UrlParam[2];
+ param[0] = new UrlParam(FileUploader.USERHASH, userhash);
+ param[1] = new UrlParam(FileUploader.CURRENT_STATE_TOKEN, currentStateToken);
+ dialog.setBaseParams(param);
+ }
+
+ public void show() {
+ if (traybarButton == null) {
+ traybarButton = new ToolbarButton();
+ traybarButton.setTooltip(i18n.t("Show/hide uploader window"));
+ traybarButton.setIcon("images/nav/upload.png");
+ traybarButton.addListener(new ButtonListenerAdapter() {
+ @Override
+ public void onClick(final Button button, final EventObject e) {
+ if (dialog.isVisible()) {
+ dialog.hide();
+ } else {
+ dialog.show();
+ }
+ }
+ });
+ ws.getSiteTraybar().addButton(traybarButton);
+ }
+ if (dialog == null) {
+ createDialog(true);
+ } else {
+ dialog.show();
+ }
+ }
+
+ private void createDialog(final boolean show) {
+ dialog = new UploadDialog(i18n.t("File uploader"), false, true);
+ dialog.setId(SITE_FILE_UPLOADER);
+ // dialog.setUploadAutostart(true);
+ dialog.setResetOnHide(false);
+ dialog.addListener(new UploadDialogListenerAdapter() {
+ @Override
+ public boolean onBeforeAdd(final UploadDialog source, final String filename) {
+ boolean mustAdd = presenter.checkFolderChange();
+ if (!mustAdd) {
+ Site.important(i18n.t("Wait until current uploads finish to upload files in other location"));
+ }
+ return mustAdd;
+ }
+
+ @Override
+ public void onUploadComplete(final UploadDialog source) {
+ if (!dialog.isVisible()) {
+ Site.info(i18n.t("Upload completed"));
+ traybarButton.destroy();
+ traybarButton = null;
+ }
+ }
+
+ @Override
+ public void onUploadError(final UploadDialog source, final String filename, final JavaScriptObject data) {
+ showError();
+ }
+
+ @Override
+ public void onUploadFailed(final UploadDialog source, final String filename) {
+ showError();
+ }
+
+ private void showError() {
+ if (!dialog.isVisible()) {
+ Site.veryImportant(i18n.t("Error uploading"));
+ }
+ }
+
+ });
+ dialog.setUrl(URL);
+ if (show) {
+ dialog.show();
+ }
+ }
+
+ private void setPermittedExtensions(final String[] extensions) {
+ DeferredCommand.addCommand(new Command() {
+ public void execute() {
+ if (dialog == null) {
+ createDialog(false);
+ }
+ Log.info("PermittedExtensions: " + extensions.toString() + " length: " + extensions.length);
+ dialog.setPermittedExtensions(extensions);
+ }
+ });
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenter.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -0,0 +1,67 @@
+package org.ourproject.kune.platf.client.ui.dialogs.upload;
+
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+
+import com.calclab.suco.client.listener.Listener0;
+
+public class FileUploaderPresenter implements FileUploader {
+
+ private FileUploaderView view;
+ private final Session session;
+ private StateToken currentUploadStateToken;
+
+ public FileUploaderPresenter(final Session session) {
+ this.session = session;
+ }
+
+ public boolean checkFolderChange() {
+ final StateToken currentStateToken = session.getCurrentStateToken();
+ if (sameContainer()) {
+ view.setUploadParams(session.getUserHash(), currentStateToken.toString());
+ return true;
+ }
+ if (view.hasUploadingFiles()) {
+ return false;
+ } else {
+ currentUploadStateToken = currentStateToken;
+ view.setUploadParams(session.getUserHash(), currentStateToken.toString());
+ return true;
+ }
+ }
+
+ public boolean hasUploadingFiles() {
+ return view.hasUploadingFiles();
+ }
+
+ public void hide() {
+ view.hide();
+ }
+
+ public void init(final FileUploaderView view) {
+ this.view = view;
+ session.onUserSignOut(new Listener0() {
+ public void onEvent() {
+ view.destroy();
+ }
+ });
+ }
+
+ public void resetPermittedExtensions() {
+ view.resetPermittedExtensions();
+ }
+
+ public void setPermittedExtensions(final String extensions) {
+ view.setPermittedExtensions(extensions);
+ }
+
+ public void show() {
+ view.show();
+ }
+
+ private boolean sameContainer() {
+ final StateToken currentStateToken = session.getCurrentStateToken();
+ currentUploadStateToken = currentUploadStateToken == null ? currentStateToken : currentUploadStateToken;
+ return currentUploadStateToken.equals(currentStateToken);
+ }
+}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderView.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderView.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderView.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -0,0 +1,19 @@
+package org.ourproject.kune.platf.client.ui.dialogs.upload;
+
+public interface FileUploaderView {
+
+ void destroy();
+
+ boolean hasUploadingFiles();
+
+ void hide();
+
+ void resetPermittedExtensions();
+
+ void setPermittedExtensions(String extensions);
+
+ void setUploadParams(String userhash, String currentUploadStateToken);
+
+ void show();
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -21,7 +21,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
+import org.ourproject.kune.platf.client.services.I18nTranslationService;
+import org.ourproject.kune.platf.client.ui.dialogs.upload.FileUploader;
import org.ourproject.kune.platf.server.access.AccessRol;
import org.ourproject.kune.platf.server.auth.ActionLevel;
import org.ourproject.kune.platf.server.auth.Authenticated;
@@ -46,14 +47,15 @@
ContentManager contentManager;
@Inject
FileManager fileManager;
+ @Inject
+ I18nTranslationService i18n;
@Override
@SuppressWarnings( { "unchecked", "deprecation" })
protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException,
IOException {
- // i18n
- JSONObject jsonResponse = createJsonResponse(true, "OK");
+ JSONObject jsonResponse = createSuccessResponse();
final DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
@@ -95,12 +97,13 @@
}
createFile(userHash, stateToken, fileName, file);
} catch (final FileUploadException e) {
- // i18n
- jsonResponse = createJsonResponse(false, "Error: File too large");
+ jsonResponse = createJsonResponse(false, i18n.t("Error: File too large"));
+
} catch (final Exception e) {
- // i18n
- jsonResponse = createJsonResponse(false, "Error uploading file");
- e.printStackTrace();
+ // SessionExpiredException,
+ // UserMustBeLoggedException
+ jsonResponse = createJsonResponse(false, i18n.t("Error uploading file"));
+ log.info(e.getCause());
}
final Writer w = new OutputStreamWriter(resp.getOutputStream());
@@ -119,12 +122,12 @@
fileUploadItem.write(file);
fileUploadItem.getContentType();
// here ContentManager code
- return createJsonResponse(true, "OK");
+ return createSuccessResponse();
}
private String calculateUploadDirLocation(final StateToken stateToken) {
- return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.pathSeparator + stateToken.getGroup()
- + File.pathSeparator + stateToken.getTool() + File.pathSeparator + stateToken.getFolder();
+ return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.separator + stateToken.getGroup()
+ + File.separator + stateToken.getTool() + File.separator + stateToken.getFolder();
}
private JSONObject createJsonResponse(final boolean success, final String message) {
@@ -151,4 +154,8 @@
}
return response;
}
+
+ private JSONObject createSuccessResponse() {
+ return createJsonResponse(true, i18n.t("Success uploading"));
+ }
}
Added: trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/ui/dialogs/upload/FileUploaderPresenterTest.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -0,0 +1,65 @@
+package org.ourproject.kune.platf.client.ui.dialogs.upload;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.state.Session;
+
+public class FileUploaderPresenterTest {
+
+ private static final String SOMEUSER_HASH = "someuserHash";
+ private FileUploaderPresenter presenter;
+ private FileUploaderView view;
+ private Session session;
+
+ @Before
+ public void before() {
+ session = Mockito.mock(Session.class);
+ view = Mockito.mock(FileUploaderView.class);
+ presenter = new FileUploaderPresenter(session);
+ presenter.init(view);
+ Mockito.stub(session.getUserHash()).toReturn(SOMEUSER_HASH);
+ }
+
+ @Test
+ public void testFirstAddInSameContainer() {
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.verify(view, Mockito.times(1)).setUploadParams(SOMEUSER_HASH, "group.tool.1");
+ }
+
+ @Test
+ public void testSomeAddsInDiffContainersButNotUploading() {
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.stub(view.hasUploadingFiles()).toReturn(false);
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.2"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.verify(view, Mockito.times(1)).setUploadParams(SOMEUSER_HASH, "group.tool.1");
+ Mockito.verify(view, Mockito.times(1)).setUploadParams(SOMEUSER_HASH, "group.tool.2");
+ }
+
+ @Test
+ public void testSomeAddsInDiffContainersButUploading() {
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.stub(view.hasUploadingFiles()).toReturn(true);
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.2"));
+ assertFalse(presenter.checkFolderChange());
+ Mockito.verify(view, Mockito.times(1)).setUploadParams(SOMEUSER_HASH, "group.tool.1");
+ Mockito.verify(view, Mockito.never()).setUploadParams(SOMEUSER_HASH, "group.tool.2");
+ }
+
+ @Test
+ public void testSomeAddsInSameContainer() {
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.stub(session.getCurrentStateToken()).toReturn(new StateToken("group.tool.1"));
+ assertTrue(presenter.checkFolderChange());
+ Mockito.verify(view, Mockito.times(2)).setUploadParams(SOMEUSER_HASH, "group.tool.1");
+ }
+}
Modified: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-24 14:53:10 UTC (rev 882)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-24 20:16:24 UTC (rev 883)
@@ -3,6 +3,7 @@
import org.junit.Before;
import org.junit.Test;
import org.ourproject.kune.platf.client.errors.SessionExpiredException;
+import org.ourproject.kune.platf.client.errors.UserMustBeLoggedException;
import org.ourproject.kune.platf.integration.IntegrationTest;
import org.ourproject.kune.platf.integration.IntegrationTestHelper;
@@ -19,7 +20,12 @@
}
@Test(expected = SessionExpiredException.class)
- public void testNoAuth() throws Exception {
+ public void testSessionExp() throws Exception {
fileUploadManager.createFile("otherhash", null, null, null);
}
+
+ @Test(expected = UserMustBeLoggedException.class)
+ public void testUserMustBeAuth() throws Exception {
+ fileUploadManager.createFile(null, null, null, null);
+ }
}
1
0
Author: vjrj
Date: 2008-09-24 16:53:10 +0200 (Wed, 24 Sep 2008)
New Revision: 882
Added:
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
Modified:
trunk/script/generateBasicUIElements.sh
trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java
trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngine.java
trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/DefaultBorderLayout.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java
trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java
Log:
Incomplete - task 66: Add a FileUploadManagerTest
Complete - task 24: new suco 0.5.0 and emite 0.4.1
http://code.google.com/p/kune/issues/detail?id=24
Modified: trunk/script/generateBasicUIElements.sh
===================================================================
--- trunk/script/generateBasicUIElements.sh 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/script/generateBasicUIElements.sh 2008-09-24 14:53:10 UTC (rev 882)
@@ -85,7 +85,7 @@
import $PACKAGE.${NAME}Panel;
import $PACKAGE.${NAME};
-register(SingletonScope.class, new Factory<${NAME}>(${NAME}.class) {
+register(Singleton.class, new Factory<${NAME}>(${NAME}.class) {
public ${NAME} create() {
final ${NAME}Presenter presenter = new ${NAME}Presenter();
final ${NAME}Panel panel = new ${NAME}Panel(presenter, ws);
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -94,7 +94,7 @@
});
application.onApplicationStop(new Listener0() {
public void onEvent() {
- chat.logout();
+ chat.stop();
}
});
session.onUserSignOut(new Listener0() {
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngine.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngine.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngine.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -27,4 +27,6 @@
void login(String jid, String passwd);
void logout();
+
+ void stop();
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -25,8 +25,8 @@
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import com.calclab.emite.core.client.xmpp.stanzas.XmppURI;
+import com.calclab.emiteuimodule.client.EmiteUIDialog;
import com.calclab.emiteuimodule.client.SubscriptionMode;
-import com.calclab.emiteuimodule.client.EmiteUIDialog;
import com.calclab.emiteuimodule.client.UserChatOptions;
import com.calclab.emiteuimodule.client.params.AvatarProvider;
import com.calclab.emiteuimodule.client.status.OwnPresence.OwnStatus;
@@ -134,6 +134,11 @@
}
}
+ public void stop() {
+ // emiteDialog.destroy();
+ emiteDialog.getSession().logout();
+ }
+
private UserChatOptions getUserChatOptions(final String jid, final String passwd) {
final String resource = "emiteui-" + new Date().getTime() + "-kune"; // +
// getGwtMetaProperty(GWT_PROPERTY_RELEASE);
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -53,10 +53,10 @@
this.contentServiceProvider = contentServiceProvider;
this.fileUploaderProvider = fileUploaderProvider;
this.contextActionRegistry = contextActionRegistry;
-
+ createActions();
}
- public void createActions() {
+ private void createActions() {
final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
i18n.t("New folder"), i18n.t("Folder"), i18n.t("New"), i18n.t("New folder"));
final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -109,7 +109,7 @@
}
});
- register(Singleton.class, new Factory<DocumentClientActions>(DocumentClientActions.class) {
+ register(ToolGroup.class, new Factory<DocumentClientActions>(DocumentClientActions.class) {
public DocumentClientActions create() {
return new DocumentClientActions($(I18nUITranslationService.class), $(ContextNavigator.class),
$(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class),
@@ -160,7 +160,7 @@
}
});
- register(Singleton.class, new Factory<DocumentContext>(DocumentContext.class) {
+ register(ToolGroup.class, new Factory<DocumentContext>(DocumentContext.class) {
public DocumentContext create() {
final DocumentContextPresenter presenter = new DocumentContextPresenter($(StateManager.class),
$$(ContextNavigator.class), $$(AdminContext.class));
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -361,19 +361,19 @@
}
});
- register(ApplicationComponentGroup.class, new Factory<SiteLogo>(SiteLogo.class) {
- public SiteLogo create() {
- final SiteLogoPresenter presenter = new SiteLogoPresenter($(Session.class));
- final SiteLogoPanel panel = new SiteLogoPanel(presenter, ws);
+ register(ApplicationComponentGroup.class, new Factory<SiteSearch>(SiteSearch.class) {
+ public SiteSearch create() {
+ final SiteSearchPresenter presenter = new SiteSearchPresenter($$(SiteSearcher.class));
+ final SiteSearchPanel panel = new SiteSearchPanel(presenter, ws, i18n);
presenter.init(panel);
return presenter;
}
});
- register(ApplicationComponentGroup.class, new Factory<SiteSearch>(SiteSearch.class) {
- public SiteSearch create() {
- final SiteSearchPresenter presenter = new SiteSearchPresenter($$(SiteSearcher.class));
- final SiteSearchPanel panel = new SiteSearchPanel(presenter, ws, i18n);
+ register(ApplicationComponentGroup.class, new Factory<SiteLogo>(SiteLogo.class) {
+ public SiteLogo create() {
+ final SiteLogoPresenter presenter = new SiteLogoPresenter($(Session.class));
+ final SiteLogoPanel panel = new SiteLogoPanel(presenter, ws);
presenter.init(panel);
return presenter;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/DefaultBorderLayout.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/DefaultBorderLayout.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/DefaultBorderLayout.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -81,7 +81,14 @@
}
public Toolbar createBottomBar(final Panel panel, final String cssStyle) {
+ return createBottomBar(panel, cssStyle, null);
+ }
+
+ public Toolbar createBottomBar(final Panel panel, final String cssStyle, final String id) {
final Toolbar bottomToolbar = new Toolbar();
+ if (id != null) {
+ bottomToolbar.setId(id);
+ }
bottomToolbar.setHeight(DEF_TOOLBAR_HEIGHT);
if (cssStyle != null) {
bottomToolbar.setCls(cssStyle);
@@ -95,8 +102,15 @@
}
public Toolbar createTopBar(final Panel panel, final String cssStyle) {
+ return createTopBar(panel, cssStyle);
+ }
+
+ public Toolbar createTopBar(final Panel panel, final String cssStyle, final String id) {
final Toolbar topToolbar = new Toolbar();
topToolbar.setHeight(DEF_TOOLBAR_HEIGHT);
+ if (id != null) {
+ topToolbar.setId(id);
+ }
if (cssStyle != null) {
topToolbar.setCls(cssStyle);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -109,14 +109,9 @@
resp.setStatus(HttpServletResponse.SC_OK);
}
- private String calculateUploadDirLocation(final StateToken stateToken) {
- return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.pathSeparator + stateToken.getGroup()
- + File.pathSeparator + stateToken.getTool() + File.pathSeparator + stateToken.getFolder();
- }
-
@Authenticated
@Authorizated(accessRolRequired = AccessRol.Editor, actionLevel = ActionLevel.container)
- private JSONObject createFile(final String userHash, final StateToken stateToken, final String fileName,
+ JSONObject createFile(final String userHash, final StateToken stateToken, final String fileName,
final FileItem fileUploadItem) throws Exception {
final String destDir = calculateUploadDirLocation(stateToken);
fileManager.mkdir(destDir);
@@ -127,6 +122,11 @@
return createJsonResponse(true, "OK");
}
+ private String calculateUploadDirLocation(final StateToken stateToken) {
+ return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.pathSeparator + stateToken.getGroup()
+ + File.pathSeparator + stateToken.getTool() + File.pathSeparator + stateToken.getFolder();
+ }
+
private JSONObject createJsonResponse(final boolean success, final String message) {
/**
*
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -275,13 +275,13 @@
confPanel(signInPanel);
signInForm = new SignInForm(i18n);
signInPanel.add(signInForm.getForm());
- signInPanel.ensureDebugId(USER_SIGN_IN_PANEL);
+ signInPanel.setCls(USER_SIGN_IN_PANEL);
signInPanel.add(createNoAccountRegister());
messagesSignInPanel = new MessagePanel();
signInPanel.add(messagesSignInPanel);
final Panel registerPanel = new Panel(i18n.t("Register"));
- registerPanel.ensureDebugId(USER_REGISTER_PANEL);
+ registerPanel.setCls(USER_REGISTER_PANEL);
confPanel(registerPanel);
centerPanel.add(signInPanel);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -22,8 +22,8 @@
public EntitySummary() {
mainPanel = new DefaultBorderLayout();
entityTools = new Panel();
- entityTools.ensureDebugId(ENTITY_TOOLS);
entityTools.setLayout(new FitLayout());
+ entityTools.setId(ENTITY_TOOLS);
entityTools.setAutoHeight(true);
vpTools = new VerticalPanel();
entityTools.add(vpTools);
@@ -33,9 +33,8 @@
entityTools.setAutoScroll(false);
entitySummary.setAutoScroll(true);
entitySummary.setCls(ENTITY_SUMMARY);
- entitySummary.ensureDebugId(ENTITY_SUMMARY);
- trayBar = mainPanel.createBottomBar(entitySummary, SITE_TRAYBAR);
- trayBar.ensureDebugId(SITE_TRAYBAR);
+ entitySummary.setId(ENTITY_SUMMARY);
+ trayBar = mainPanel.createBottomBar(entitySummary, SITE_TRAYBAR, SITE_TRAYBAR);
mainPanel.add(entityTools, DefaultBorderLayout.Position.NORTH);
mainPanel.add(entitySummary, DefaultBorderLayout.Position.CENTER);
trayBar.addFill();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -61,8 +61,8 @@
contextWrap.setBorder(true);
content = new Panel();
context = new Panel();
- content.ensureDebugId(ENTITY_CONTENT);
- context.ensureDebugId(ENTITY_CONTEXT);
+ content.setCls(ENTITY_CONTENT);
+ context.setCls(ENTITY_CONTEXT);
content.setBorder(false);
context.setBorder(false);
context.setCollapsible(true);
Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-24 01:47:16 UTC (rev 881)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerTest.java 2008-09-24 14:53:10 UTC (rev 882)
@@ -0,0 +1,25 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ourproject.kune.platf.client.errors.SessionExpiredException;
+import org.ourproject.kune.platf.integration.IntegrationTest;
+import org.ourproject.kune.platf.integration.IntegrationTestHelper;
+
+import com.google.inject.Inject;
+
+public class FileUploadManagerTest extends IntegrationTest {
+
+ @Inject
+ FileUploadManager fileUploadManager;
+
+ @Before
+ public void create() {
+ new IntegrationTestHelper(this);
+ }
+
+ @Test(expected = SessionExpiredException.class)
+ public void testNoAuth() throws Exception {
+ fileUploadManager.createFile("otherhash", null, null, null);
+ }
+}
1
0
Author: vjrj
Date: 2008-09-24 03:47:16 +0200 (Wed, 24 Sep 2008)
New Revision: 881
Added:
trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationComponentGroup.java
trunk/src/main/java/org/ourproject/kune/platf/client/app/ToolGroup.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneCoreModule.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileManagerTest.java
trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java
Removed:
trunk/src/main/java/org/ourproject/kune/platf/client/services/Kune.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java
Modified:
trunk/pom.xml
trunk/src/main/java/org/ourproject/kune/app/Kune.gwt.xml
trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java
trunk/src/main/java/org/ourproject/kune/chat/Kune-Chat.gwt.xml
trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java
trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java
trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java
trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java
trunk/src/main/java/org/ourproject/kune/chat/client/ctx/rooms/RoomsAdminPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContent.java
trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java
trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/app/Application.java
trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/ChatUserParamsDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserDTO.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java
trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java
trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorItemPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/MenuItem.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridButton.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridDropConfiguration.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridMenuPanel.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java
trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RatePresenter.java
trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java
trunk/src/main/java/org/ourproject/kune/platf/server/domain/ChatUserParams.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nTranslatorPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nUITranslationService.java
trunk/src/main/java/org/ourproject/kune/workspace/client/licensefoot/EntityLicensePresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcher.java
trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcherPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/site/Site.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitelogo/SiteLogoPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteoptions/SiteOptionsPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteprogress/SiteProgressPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java
trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java
trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/summary/GroupSummaryPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePanel.java
trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntitySubTitlePresenter.java
trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java
trunk/src/test/java/org/ourproject/kune/platf/integration/site/UserServiceTest.java
trunk/src/test/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenterTest.java
Log:
(hosted mode not working, waiting emiteui bugfix)
Incomplete - task 63: Use ensureDebugId for automated testing
Complete - task 49: New server FileManager (to help with files)
Incomplete - task 51: File upload server manager
Incomplete - task 24: new suco 0.5.0 and emite 0.4.1
http://code.google.com/p/kune/issues/detail?id=24
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/pom.xml 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,522 +1,603 @@
<?xml version="1.0" encoding="UTF-8"?>
<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.ourproject</groupId>
- <artifactId>kune</artifactId>
- <packaging>jar</packaging>
- <version>0.0.4</version>
- <description>kune free/open/libre collaboration platform</description>
- <name>kune</name>
- <url>http://kune.ourproject.org</url>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.ourproject</groupId>
+ <artifactId>kune</artifactId>
+ <packaging>jar</packaging>
+ <version>0.0.4</version>
+ <description>
+ kune free/open/libre collaboration platform
+ </description>
+ <name>kune</name>
+ <url>http://kune.ourproject.org</url>
- <dependencies>
- <!-- guice -->
- <dependency>
- <groupId>com.google.code.guice</groupId>
- <artifactId>guice</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>com.google.code.guice</groupId>
- <artifactId>guice-servlet</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>aopalliance</groupId>
- <artifactId>aopalliance</artifactId>
- <version>1.0</version>
- </dependency>
+ <dependencies>
+ <!-- guice -->
+ <dependency>
+ <groupId>com.google.code.guice</groupId>
+ <artifactId>guice</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.guice</groupId>
+ <artifactId>guice-servlet</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ <version>1.0</version>
+ </dependency>
- <!-- gwt -->
- <dependency>
- <groupId>com.google.gwt</groupId>
- <artifactId>gwt-user</artifactId>
- <version>1.5.2</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>com.google.gwt</groupId>
- <artifactId>gwt-servlet</artifactId>
- <version>1.5.2</version>
- </dependency>
- <!--
- <dependency>
- <groupId>com.extjs</groupId>
- <artifactId>gxt</artifactId>
- <version>1.0-beta2</version>
- </dependency>
- -->
- <dependency>
- <groupId>com.gwtext</groupId>
- <artifactId>gwtext</artifactId>
- <version>2.0.5</version>
- </dependency>
- <dependency>
- <groupId>com.gwtextux</groupId>
- <artifactId>gwtextux</artifactId>
- <version>0.3.0b</version>
- </dependency>
- <dependency>
- <groupId>com.allen_sauer.gwt.log.gwt-log</groupId>
- <artifactId>gwt-log</artifactId>
- <version>2.5.2</version>
- </dependency>
- <dependency>
- <groupId>com.allen_sauer.gwt.voices.gwt-voices</groupId>
- <artifactId>gwt-voices</artifactId>
- <version>1.5.5</version>
- </dependency>
+ <!-- gwt -->
+ <dependency>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt-user</artifactId>
+ <version>1.5.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt-servlet</artifactId>
+ <version>1.5.2</version>
+ </dependency>
+ <!--
+ <dependency>
+ <groupId>com.extjs</groupId>
+ <artifactId>gxt</artifactId>
+ <version>1.0-beta2</version>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>com.gwtext</groupId>
+ <artifactId>gwtext</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>com.gwtextux</groupId>
+ <artifactId>gwtextux</artifactId>
+ <version>0.3.0b</version>
+ </dependency>
+ <dependency>
+ <groupId>com.allen_sauer.gwt.log.gwt-log</groupId>
+ <artifactId>gwt-log</artifactId>
+ <version>2.5.2</version>
+ </dependency>
+ <dependency>
+ <groupId>com.allen_sauer.gwt.voices.gwt-voices</groupId>
+ <artifactId>gwt-voices</artifactId>
+ <version>1.5.5</version>
+ </dependency>
- <!-- utilities -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- <dependency>
- <groupId>net.sf.dozer</groupId>
- <artifactId>dozer</artifactId>
- <version>4.0</version>
- </dependency>
+ <!-- utilities -->
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.dozer</groupId>
+ <artifactId>dozer</artifactId>
+ <version>4.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.calclab</groupId>
+ <artifactId>suco</artifactId>
+ <version>0.5.02</version>
+ </dependency>
- <!-- xmpp -->
- <dependency>
- <groupId>org.jivesoftware.smack</groupId>
- <artifactId>smack</artifactId>
- <version>3.0.4</version>
- </dependency>
- <dependency>
- <groupId>org.jivesoftware.smackx</groupId>
- <artifactId>smackx</artifactId>
- <version>3.0.4</version>
- </dependency>
- <dependency>
- <groupId>org.jivesoftware.smackx.debugger</groupId>
- <artifactId>smackx-debugger</artifactId>
- <version>3.0.4</version>
- </dependency>
+ <!-- xmpp -->
+ <dependency>
+ <groupId>com.calclab.emite</groupId>
+ <artifactId>emite</artifactId>
+ <version>0.4.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jivesoftware.smack</groupId>
+ <artifactId>smack</artifactId>
+ <version>3.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jivesoftware.smackx</groupId>
+ <artifactId>smackx</artifactId>
+ <version>3.0.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jivesoftware.smackx.debugger</groupId>
+ <artifactId>smackx-debugger</artifactId>
+ <version>3.0.4</version>
+ </dependency>
- <!-- mysql -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.0.5</version>
- </dependency>
+ <!-- mysql -->
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.0.5</version>
+ </dependency>
- <!-- hibernate JPA -->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-search</artifactId>
- <version>3.0.0.GA</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate</artifactId>
- <version>3.2.5.ga</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-annotations</artifactId>
- <version>3.3.0.ga</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <version>3.3.1.ga</version>
- </dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-tools</artifactId>
- <version>3.2.0.beta9a</version>
- </dependency>
- <dependency>
- <groupId>c3p0</groupId>
- <artifactId>c3p0</artifactId>
- <version>0.9.1.2</version>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.0</version>
- </dependency>
- <dependency>
- <groupId>com.wideplay</groupId>
- <artifactId>warp-persist</artifactId>
- <version>0.6</version>
- </dependency>
+ <!-- hibernate JPA -->
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-search</artifactId>
+ <version>3.0.0.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate</artifactId>
+ <version>3.2.5.ga</version>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-annotations</artifactId>
+ <version>3.3.0.ga</version>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-entitymanager</artifactId>
+ <version>3.3.1.ga</version>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-tools</artifactId>
+ <version>3.2.0.beta9a</version>
+ </dependency>
+ <dependency>
+ <groupId>c3p0</groupId>
+ <artifactId>c3p0</artifactId>
+ <version>0.9.1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.wideplay</groupId>
+ <artifactId>warp-persist</artifactId>
+ <version>0.6</version>
+ </dependency>
- <!-- REST: xml and json (stax) -->
- <dependency>
- <groupId>com.thoughtworks.xstream</groupId>
- <artifactId>xstream</artifactId>
- <version>1.2.2</version>
- </dependency>
- <dependency>
- <groupId>stax</groupId>
- <artifactId>stax-api</artifactId>
- <version>1.0.1</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jettison</groupId>
- <artifactId>jettison</artifactId>
- <version>1.0-RC2</version>
- </dependency>
- <dependency>
- <groupId>net.sf.json-lib</groupId>
- <artifactId>json-lib</artifactId>
- <version>2.1</version>
- <classifier>jdk15</classifier>
- </dependency>
+ <!-- REST: xml and json (stax) -->
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <artifactId>xstream</artifactId>
+ <version>1.2.2</version>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>1.0-RC2</version>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.json-lib</groupId>
+ <artifactId>json-lib</artifactId>
+ <version>2.1</version>
+ <classifier>jdk15</classifier>
+ </dependency>
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2</version>
- </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2</version>
+ </dependency>
- <!-- File upload -->
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.7.0</version>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>1.2</version>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.1</version>
- </dependency>
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>1.1.1</version>
- </dependency>
+ <!-- File upload -->
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>1.7.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-fileupload</groupId>
+ <artifactId>commons-fileupload</artifactId>
+ <version>1.1.1</version>
+ </dependency>
- <dependency>
- <groupId>org.cafesip.gwtcomp</groupId>
- <artifactId>gwtcomp</artifactId>
- <version>0.0.3b</version>
- </dependency>
- <dependency>
- <groupId>org.cafesip.gwtcomp</groupId>
- <artifactId>gwtcomp-servlet</artifactId>
- <version>0.0.3b</version>
- </dependency>
+ <dependency>
+ <groupId>org.cafesip.gwtcomp</groupId>
+ <artifactId>gwtcomp</artifactId>
+ <version>0.0.3b</version>
+ </dependency>
+ <dependency>
+ <groupId>org.cafesip.gwtcomp</groupId>
+ <artifactId>gwtcomp-servlet</artifactId>
+ <version>0.0.3b</version>
+ </dependency>
- <!-- db upgrades -->
+ <!-- db upgrades -->
- <dependency>
- <groupId>org.liquibase</groupId>
- <artifactId>liquibase-core</artifactId>
- <version>1.4.1</version>
- </dependency>
+ <dependency>
+ <groupId>org.liquibase</groupId>
+ <artifactId>liquibase-core</artifactId>
+ <version>1.4.1</version>
+ </dependency>
- <!-- jetty dependencies -->
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <version>6.1.5</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty</artifactId>
- <version>6.1.5</version>
- <scope>provided</scope>
- </dependency>
+ <!-- jetty dependencies -->
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ <version>6.1.5</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty</artifactId>
+ <version>6.1.5</version>
+ <scope>provided</scope>
+ </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.4</version>
- <scope>provided</scope>
- </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.4</version>
+ <scope>provided</scope>
+ </dependency>
- <!-- testing dependencies -->
- <dependency>
- <groupId>com.h2database</groupId>
- <artifactId>h2</artifactId>
- <version>1.0.20070617</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.4</version>
- <!--
- <scope>test</scope>
- -->
- </dependency>
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <version>2.2</version>
- <scope>test</scope>
- </dependency>
- <!--
- <dependency>
- <groupId>com.google</groupId>
- <artifactId>gwt-dev</artifactId>
- <version>1.4.61</version>
- <scope>test</scope>
- </dependency>
- -->
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <version>1.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.calclab.emite</groupId>
- <artifactId>emite</artifactId>
- <version>0.3.3</version>
- </dependency>
- <dependency>
- <groupId>com.calclab</groupId>
- <artifactId>suco</artifactId>
- <version>0.4.0</version>
- </dependency>
- </dependencies>
- <!-- http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/ind… -->
- <repositories>
- <repository>
- <id>repository.jboss.org</id>
- <name>JBoss Maven Repository</name>
- <url>http://repository.jboss.org/maven2</url>
- <layout>default</layout>
- </repository>
- <repository>
- <id>dyndns-repo</id>
- <url>http://maven.dyndns.org/2</url>
- </repository>
- <repository>
- <id>gwt-maven</id>
- <url>http://gwt-maven.googlecode.com/svn/trunk/mavenrepo/</url>
- </repository>
- <repository>
- <id>kune-maven</id>
- <url>http://kune.ourproject.org/mavenrepo/</url>
- </repository>
- <repository>
- <id>gwtext</id>
- <url>http://www.gwt-ext.com/maven2/</url>
- </repository>
- </repositories>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.3</version>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.0</version>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>com.totsp.gwt</groupId>
- <artifactId>maven-googlewebtoolkit2-plugin</artifactId>
- <version>2.0-beta23</version>
- <configuration>
- <logLevel>INFO</logLevel>
- <style>PRETTY</style>
- <runTarget>org.ourproject.kune.app.Kune/Kune.html</runTarget>
- <compileTargets>
- <compileTarget>org.ourproject.kune.app.Kune</compileTarget>
- </compileTargets>
- <generatorRootClasses>
- <value>org.ourproject.kune.MyBean</value>
- </generatorRootClasses>
- <generatorDestinationPackage>
- org.ourproject.kune.app.Kune
- </generatorDestinationPackage>
- <generateGettersAndSetters>true</generateGettersAndSetters>
- <generatePropertyChangeSupport>
- true
- </generatePropertyChangeSupport>
- </configuration>
- <executions>
- <execution>
- <goals>
- <!-- <goal>mergewebxml</goal> -->
- <!-- <goal>compile</goal> -->
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.0</version>
- <configuration>
- <webXml>target/web.xml</webXml>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-eclipse-plugin</artifactId>
- <version>2.3</version>
- <configuration>
- <downloadSources>true</downloadSources>
- <downloadJavadocs>true</downloadJavadocs>
- <wtpversion>1.5</wtpversion>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <version>6.1.5</version>
- <configuration>
- <contextPath>/</contextPath>
- <scanIntervalSeconds>0</scanIntervalSeconds>
- </configuration>
- </plugin>
+ <!-- testing dependencies -->
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>1.0.20070617</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.4</version>
+ <!--
+ <scope>test</scope>
+ -->
+ </dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>2.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.openqa.selenium.client-drivers</groupId>
+ <artifactId>selenium-java-client-driver</artifactId>
+ <version>1.0-beta-1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
- <plugin>
- <groupId>org.liquibase</groupId>
- <artifactId>liquibase-plugin</artifactId>
- <version>1.4.1.0</version>
- <executions>
- <execution>
- <phase>process-resources</phase>
- <configuration>
- <changeLogFile>
- src/main/resources/db/liquibase_changelog.xml
- </changeLogFile>
- <driver>com.mysql.jdbc.Driver</driver>
- <url>jdbc:mysql://localhost/kune_dev</url>
- <username>kune</username>
- <password>db4kune</password>
- <verbose>true</verbose>
- </configuration>
- <!--
- <configuration>
- <verbose>true</verbose>
- <propertiesFile>
- src/main/resources/db/liquibase.properties
- </propertiesFile>
- </configuration>
- -->
- <goals>
- <goal>migrate</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.2</version>
- <executions>
- <execution>
- <id>core</id>
- <phase>package</phase>
- <goals>
- <goal>jar</goal>
- </goals>
- <configuration>
- <classifier>core</classifier>
- <includes>
- <include>**/Kune-Platform.gwt.xml**</include>
- <include>**/I18nTranslationService**</include>
- <include>**/BasicDialog.**</include>
- <include>**/HorizontalLine.**</include>
- <include>**/AbstractLabel.**</include>
- <include>**/IconLabel.**</include>
- <include>**/EditableIconLabel.**</include>
- <include>**/EditableClickListener.**</include>
- <include>**/KuneStringUtils.**</include>
- <include>**/IconHyperlink*.**</include>
- <include>**/LabelWrapper*.**</include>
- <include>**/KuneUiUtils.**</include>
- <include>**/View.**</include>
- <!-- <include>**/platf/**</include>
- <include>**/platf/client/extend/**</include>
- <include>**/platf/client/*java</include>
- <include>**/platf/client/app/**</include>
- <include>**/platf/client/dispatch/**</include>
- -->
- </includes>
- </configuration>
- </execution>
- <execution>
- <id>helloworldplugin</id>
- <phase>package</phase>
- <goals>
- <goal>jar</goal>
- </goals>
- <configuration>
- <classifier>helloworldplugin</classifier>
- <includes>
- <include>**/HelloWorld*</include>
- </includes>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- <resource>
- <directory>src/main/java</directory>
- </resource>
- </resources>
- </build>
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jxr-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-pmd-plugin</artifactId>
- <version>2.2</version>
- <configuration>
- <linkXref>true</linkXref>
- <sourceEncoding>utf-8</sourceEncoding>
- <minimumTokens>100</minimumTokens>
- <targetJdk>1.5</targetJdk>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <systemProperties>
- <property>
- <name>net.sourceforge.cobertura.datafile</name>
- <value>
- ${project.build.directory}/cobertura/cobertura.ser
- </value>
- </property>
- </systemProperties>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>jdepend-maven-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>findbugs-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </reporting>
+ <!-- http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/ind… -->
+ <repositories>
+ <repository>
+ <id>repository.jboss.org</id>
+ <name>JBoss Maven Repository</name>
+ <url>http://repository.jboss.org/maven2</url>
+ <layout>default</layout>
+ </repository>
+ <repository>
+ <id>dyndns-repo</id>
+ <url>http://maven.dyndns.org/2</url>
+ </repository>
+ <repository>
+ <id>gwt-maven</id>
+ <url>
+ http://gwt-maven.googlecode.com/svn/trunk/mavenrepo/
+ </url>
+ </repository>
+ <repository>
+ <id>kune-maven</id>
+ <url>http://kune.ourproject.org/mavenrepo/</url>
+ </repository>
+ <repository>
+ <id>gwtext</id>
+ <url>http://www.gwt-ext.com/maven2/</url>
+ </repository>
+ <repository>
+ <id>openqa.org</id>
+ <name>Openqa Release Repository</name>
+ <url>http://archiva.openqa.org/repository/releases</url>
+ <layout>default</layout>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ </repository>
+ <repository>
+ <id>openqa.org</id>
+ <name>Openqa Snapshot Repository</name>
+ <url>http://archiva.openqa.org/repository/snapshots</url>
+ <layout>default</layout>
+ <snapshots>
+ <enabled>true</enabled>
+ <updatePolicy>daily</updatePolicy>
+ <checksumPolicy>ignore</checksumPolicy>
+ </snapshots>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.totsp.gwt</groupId>
+ <artifactId>maven-googlewebtoolkit2-plugin</artifactId>
+ <version>2.0-beta23</version>
+ <configuration>
+ <logLevel>INFO</logLevel>
+ <style>PRETTY</style>
+ <runTarget>
+ org.ourproject.kune.app.Kune/Kune.html
+ </runTarget>
+ <compileTargets>
+ <compileTarget>
+ org.ourproject.kune.app.Kune
+ </compileTarget>
+ </compileTargets>
+ <generatorRootClasses>
+ <value>org.ourproject.kune.MyBean</value>
+ </generatorRootClasses>
+ <generatorDestinationPackage>
+ org.ourproject.kune.app.Kune
+ </generatorDestinationPackage>
+ <generateGettersAndSetters>
+ true
+ </generateGettersAndSetters>
+ <generatePropertyChangeSupport>
+ true
+ </generatePropertyChangeSupport>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <!-- <goal>mergewebxml</goal> -->
+ <!-- <goal>compile</goal> -->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.0</version>
+ <configuration>
+ <webXml>target/web.xml</webXml>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <downloadSources>true</downloadSources>
+ <downloadJavadocs>true</downloadJavadocs>
+ <wtpversion>1.5</wtpversion>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>maven-jetty-plugin</artifactId>
+ <version>6.1.5</version>
+ <configuration>
+ <contextPath>/</contextPath>
+ <scanIntervalSeconds>0</scanIntervalSeconds>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.liquibase</groupId>
+ <artifactId>liquibase-plugin</artifactId>
+ <version>1.4.1.0</version>
+ <executions>
+ <execution>
+ <phase>process-resources</phase>
+ <configuration>
+ <changeLogFile>
+ src/main/resources/db/liquibase_changelog.xml
+ </changeLogFile>
+ <driver>com.mysql.jdbc.Driver</driver>
+ <url>jdbc:mysql://localhost/kune_dev</url>
+ <username>kune</username>
+ <password>db4kune</password>
+ <verbose>true</verbose>
+ </configuration>
+ <!--
+ <configuration>
+ <verbose>true</verbose>
+ <propertiesFile>
+ src/main/resources/db/liquibase.properties
+ </propertiesFile>
+ </configuration>
+ -->
+ <goals>
+ <goal>migrate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <id>core</id>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <configuration>
+ <classifier>core</classifier>
+ <includes>
+ <include>
+ **/Kune-Platform.gwt.xml**
+ </include>
+ <include>
+ **/I18nTranslationService**
+ </include>
+ <include>**/BasicDialog.**</include>
+ <include>**/HorizontalLine.**</include>
+ <include>**/AbstractLabel.**</include>
+ <include>**/IconLabel.**</include>
+ <include>
+ **/EditableIconLabel.**
+ </include>
+ <include>
+ **/EditableClickListener.**
+ </include>
+ <include>**/KuneStringUtils.**</include>
+ <include>**/IconHyperlink*.**</include>
+ <include>**/LabelWrapper*.**</include>
+ <include>**/KuneUiUtils.**</include>
+ <include>**/View.**</include>
+ <!-- <include>**/platf/**</include>
+ <include>**/platf/client/extend/**</include>
+ <include>**/platf/client/*java</include>
+ <include>**/platf/client/app/**</include>
+ <include>**/platf/client/dispatch/**</include>
+ -->
+ </includes>
+ </configuration>
+ </execution>
+ <execution>
+ <id>helloworldplugin</id>
+ <phase>package</phase>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <configuration>
+ <classifier>helloworldplugin</classifier>
+ <includes>
+ <include>**/HelloWorld*</include>
+ </includes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>selenium-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>pre-integration-test</phase>
+ <goals>
+ <goal>start-server</goal>
+ </goals>
+ <configuration>
+ <background>true</background>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <!-- Skip the normal tests, we'll run them in the integration-test phase -->
+ <skip>true</skip>
+ </configuration>
+
+ <executions>
+ <execution>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>test</goal>
+ </goals>
+ <configuration>
+ <skip>false</skip>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>src/main/java</directory>
+ </resource>
+ </resources>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <version>2.2</version>
+ <configuration>
+ <linkXref>true</linkXref>
+ <sourceEncoding>utf-8</sourceEncoding>
+ <minimumTokens>100</minimumTokens>
+ <targetJdk>1.5</targetJdk>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>cobertura-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <property>
+ <name>
+ net.sourceforge.cobertura.datafile
+ </name>
+ <value>
+ ${project.build.directory}/cobertura/cobertura.ser
+ </value>
+ </property>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>jdepend-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>findbugs-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
</project>
Modified: trunk/src/main/java/org/ourproject/kune/app/Kune.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/Kune.gwt.xml 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/app/Kune.gwt.xml 2008-09-24 01:47:16 UTC (rev 881)
@@ -2,6 +2,9 @@
<inherits name='com.google.gwt.i18n.I18N' />
<inherits name='com.google.gwt.user.User' />
+ <!-- for automated testing (see UIObject.ensureDebugId()) -->
+ <inherits name="com.google.gwt.user.Debug"/>
+
<!-- http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/4d38… -->
<set-property name="gwt.suppressNonStaticFinalFieldWarnings" value="true" />
Modified: trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/app/client/KuneEntryPoint.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -19,9 +19,14 @@
*/
package org.ourproject.kune.app.client;
-import org.ourproject.kune.platf.client.services.Kune;
+import org.ourproject.kune.chat.client.ChatClientModule;
+import org.ourproject.kune.docs.client.DocumentClientModule;
+import org.ourproject.kune.platf.client.services.KuneCoreModule;
+import org.ourproject.kune.platf.client.services.KuneModule;
import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.emiteuimodule.client.EmiteUIModule;
+import com.calclab.suco.client.Suco;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
@@ -45,6 +50,8 @@
}
public void onModuleLoadCont() {
- Kune.create();
+ Suco.install(new KuneCoreModule(), new EmiteUIModule(), new DocumentClientModule(), new ChatClientModule(),
+ new KuneModule());
+ // Suco.get(Application.class).start();
}
}
Modified: trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/app/server/KuneRackModule.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -28,7 +28,7 @@
import org.ourproject.kune.platf.client.rpc.SocialNetworkService;
import org.ourproject.kune.platf.server.LoggerMethodInterceptor;
import org.ourproject.kune.platf.server.PlatformServerModule;
-import org.ourproject.kune.platf.server.manager.impl.FileUploadManagerRevisited;
+import org.ourproject.kune.platf.server.manager.impl.FileUploadManager;
import org.ourproject.kune.platf.server.properties.PropertiesFileName;
import org.ourproject.kune.platf.server.rest.ContentJSONService;
import org.ourproject.kune.platf.server.rest.GroupJSONService;
@@ -96,7 +96,7 @@
UserService.class, SocialNetworkService.class, I18nService.class);
builder.installRESTServices("^/kune/json/", TestJSONService.class, GroupJSONService.class,
UserJSONService.class, I18nTranslationJSONService.class, ContentJSONService.class);
- builder.installServlet("^/kune/servlets/", FileUploadManagerRevisited.class);
+ builder.installServlet("^/kune/servlets/", FileUploadManager.class);
builder.at("^/kune/(.*)$").install(new ForwardFilter("^/kune/(.*)$", "/gwt/org.ourproject.kune.app.Kune/{0}"));
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/Kune-Chat.gwt.xml
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/Kune-Chat.gwt.xml 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/Kune-Chat.gwt.xml 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,6 +1,5 @@
<module>
<inherits name='org.ourproject.kune.platf.Kune-Platform' />
<inherits name='org.ourproject.kune.workspace.Kune-Workspace' />
- <inherits name="com.calclab.emite.Emite" />
<inherits name="com.calclab.emiteuimodule.EmiteUIModule" />
</module>
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientModule.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -15,6 +15,7 @@
import org.ourproject.kune.chat.client.ctx.rooms.RoomsAdmin;
import org.ourproject.kune.chat.client.ctx.rooms.RoomsAdminPresenter;
import org.ourproject.kune.platf.client.app.Application;
+import org.ourproject.kune.platf.client.app.ToolGroup;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.platf.client.state.StateManager;
@@ -27,9 +28,9 @@
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
import com.calclab.emiteuimodule.client.EmiteUIDialog;
-import com.calclab.suco.client.module.AbstractModule;
-import com.calclab.suco.client.provider.Factory;
-import com.calclab.suco.client.scope.SingletonScope;
+import com.calclab.suco.client.ioc.decorator.Singleton;
+import com.calclab.suco.client.ioc.module.AbstractModule;
+import com.calclab.suco.client.ioc.module.Factory;
public class ChatClientModule extends AbstractModule {
@@ -39,13 +40,13 @@
@Override
public void onLoad() {
- register(SingletonScope.class, new Factory<ChatInfo>(ChatInfo.class) {
+ register(Singleton.class, new Factory<ChatInfo>(ChatInfo.class) {
public ChatInfo create() {
return new ChatInfoPanel();
}
});
- register(SingletonScope.class, new Factory<ChatContent>(ChatContent.class) {
+ register(Singleton.class, new Factory<ChatContent>(ChatContent.class) {
public ChatContent create() {
final WorkspaceDeckPanel panel = new WorkspaceDeckPanel();
final ChatContentPresenter presenter = new ChatContentPresenter($(EmiteUIDialog.class), panel,
@@ -54,7 +55,7 @@
}
});
- register(SingletonScope.class, new Factory<ChatContext>(ChatContext.class) {
+ register(Singleton.class, new Factory<ChatContext>(ChatContext.class) {
public ChatContext create() {
final WorkspaceDeckPanel panel = new WorkspaceDeckPanel();
final ChatContextPresenter presenter = new ChatContextPresenter(panel, $$(RoomsAdmin.class));
@@ -62,7 +63,7 @@
}
});
- register(SingletonScope.class, new Factory<ChatRoomControl>(ChatRoomControl.class) {
+ register(Singleton.class, new Factory<ChatRoomControl>(ChatRoomControl.class) {
public ChatRoomControl create() {
final ChatRoomControlPresenter presenter = new ChatRoomControlPresenter();
final ChatRoomControlPanel panel = new ChatRoomControlPanel($(I18nUITranslationService.class),
@@ -72,14 +73,14 @@
}
});
- register(SingletonScope.class, new Factory<ChatRoom>(ChatRoom.class) {
+ register(Singleton.class, new Factory<ChatRoom>(ChatRoom.class) {
public ChatRoom create() {
final ChatRoomPanel panel = new ChatRoomPanel($(WorkspaceSkeleton.class));
final ChatRoomPresenter presenter = new ChatRoomPresenter(panel);
return presenter;
}
});
- register(SingletonScope.class, new Factory<RoomsAdmin>(RoomsAdmin.class) {
+ register(Singleton.class, new Factory<RoomsAdmin>(RoomsAdmin.class) {
public RoomsAdmin create() {
final RoomsAdminPresenter presenter = new RoomsAdminPresenter($(ContextNavigator.class),
$(I18nUITranslationService.class), $$(StateManager.class), $(Session.class),
@@ -88,7 +89,7 @@
}
});
- register(SingletonScope.class, new Factory<ChatClientTool>(ChatClientTool.class) {
+ register(ToolGroup.class, new Factory<ChatClientTool>(ChatClientTool.class) {
public ChatClientTool create() {
return new ChatClientTool($(Session.class), $(Application.class), $(I18nUITranslationService.class),
$(EmiteUIDialog.class), $(WorkspaceSkeleton.class), $$(GroupMembersSummary.class),
@@ -96,7 +97,5 @@
}
});
- $(ChatClientTool.class);
-
}
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatClientTool.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -38,11 +38,11 @@
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.emite.client.xmpp.stanzas.XmppURI;
+import com.calclab.emite.core.client.xmpp.stanzas.XmppURI;
import com.calclab.emiteuimodule.client.EmiteUIDialog;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
public class ChatClientTool extends AbstractClientTool implements ChatProvider {
public static final String NAME = "chats";
@@ -61,7 +61,7 @@
super(NAME, i18n.t("chat rooms"), toolSelector, wsThemePresenter, ws);
this.chatContentProvider = chatContentProvider;
this.chatContextProvider = chatContextProvider;
- session.onInitDataReceived(new Slot<InitDataDTO>() {
+ session.onInitDataReceived(new Listener<InitDataDTO>() {
public void onEvent(final InitDataDTO initData) {
checkChatDomain(initData.getChatDomain());
final ChatOptions chatOptions = new ChatOptions(initData.getChatHttpBase(), initData.getChatDomain(),
@@ -69,7 +69,7 @@
chat = new ChatEngineXmpp(emiteUIDialog, chatOptions, i18n, ws);
groupMembersSummaryProvider.get().addUserOperation(
new MenuItem<GroupDTO>("images/new-chat.gif", i18n.t("Start a chat with this member"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO group) {
emiteUIDialog.show();
if (emiteUIDialog.isLoggedIn()) {
@@ -92,17 +92,17 @@
}
}
});
- application.onApplicationStop(new Slot0() {
+ application.onApplicationStop(new Listener0() {
public void onEvent() {
chat.logout();
}
});
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
chat.logout();
}
});
- session.onUserSignIn(new Slot<UserInfoDTO>() {
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
public void onEvent(final UserInfoDTO user) {
chat.login(user.getChatName(), user.getChatPassword());
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ChatEngineXmpp.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -24,13 +24,13 @@
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-import com.calclab.emite.client.im.roster.RosterManager.SubscriptionMode;
-import com.calclab.emite.client.xmpp.stanzas.XmppURI;
+import com.calclab.emite.core.client.xmpp.stanzas.XmppURI;
+import com.calclab.emiteuimodule.client.SubscriptionMode;
import com.calclab.emiteuimodule.client.EmiteUIDialog;
import com.calclab.emiteuimodule.client.UserChatOptions;
import com.calclab.emiteuimodule.client.params.AvatarProvider;
import com.calclab.emiteuimodule.client.status.OwnPresence.OwnStatus;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.Button;
@@ -101,24 +101,24 @@
}
});
ws.getSiteTraybar().addButton(traybarButton);
- emiteDialog.onChatAttended(new Slot<String>() {
+ emiteDialog.onChatAttended(new Listener<String>() {
public void onEvent(final String parameter) {
traybarButton.setIcon("images/e-icon.gif");
}
});
- emiteDialog.onChatUnattendedWithActivity(new Slot<String>() {
+ emiteDialog.onChatUnattendedWithActivity(new Listener<String>() {
public void onEvent(final String parameter) {
traybarButton.setIcon("images/e-icon-a.gif");
}
});
}
emiteDialog.hide();
- emiteDialog.onChatAttended(new Slot<String>() {
+ emiteDialog.onChatAttended(new Listener<String>() {
public void onEvent(final String parameter) {
Window.setTitle(initialWindowTitle);
}
});
- emiteDialog.onChatUnattendedWithActivity(new Slot<String>() {
+ emiteDialog.onChatUnattendedWithActivity(new Listener<String>() {
public void onEvent(final String chatTitle) {
Window.setTitle("(* " + chatTitle + ") " + initialWindowTitle);
}
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/cnt/ChatContentPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -28,9 +28,9 @@
import org.ourproject.kune.workspace.client.component.WorkspaceDeckView;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.emite.client.xmpp.stanzas.XmppURI;
+import com.calclab.emite.core.client.xmpp.stanzas.XmppURI;
import com.calclab.emiteuimodule.client.EmiteUIDialog;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ChatContentPresenter implements ChatContent {
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/ChatContextPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -25,7 +25,7 @@
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.workspace.client.component.WorkspaceDeckView;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ChatContextPresenter implements ChatContext {
Modified: trunk/src/main/java/org/ourproject/kune/chat/client/ctx/rooms/RoomsAdminPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/chat/client/ctx/rooms/RoomsAdminPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/chat/client/ctx/rooms/RoomsAdminPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -30,7 +30,7 @@
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class RoomsAdminPresenter implements RoomsAdmin {
private final ContextNavigator contextNavigator;
@@ -46,7 +46,7 @@
// contextNavigator.registerType(ChatClientTool.TYPE_ROOM,
// images.chatGreen());
// contextNavigator.canCreate(i18n.t("New chat room"), i18n.t("Add a
- // chat room"), new Slot<String>() {
+ // chat room"), new Listener<String>() {
// public void onEvent(final String name) {
// Site.showProgressProcessing();
// final String groupShortName =
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -29,8 +29,8 @@
import org.ourproject.kune.workspace.client.site.Site;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
public class DocumentClientActions {
@@ -66,7 +66,7 @@
.t("New wiki"), i18n.t("Folder"), i18n.t("New"), i18n.t("wiki"));
final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
- ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ ActionPosition.topbarAndItemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
Site.showProgressProcessing();
contentServiceProvider.get().addContent(session.getUserHash(),
@@ -85,7 +85,7 @@
addDoc.setIconUrl("images/nav/page_add.png");
final ActionMenuDescriptor<StateToken> delContainer = new ActionMenuDescriptor<StateToken>(
- AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
Site.info("Sorry, in development");
}
@@ -97,7 +97,7 @@
delContainer.setConfirmationText(i18n.t("You will delete it and also all its contents. Are you sure?"));
final ActionMenuDescriptor<StateToken> delContent = new ActionMenuDescriptor<StateToken>(
- AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
contentServiceProvider.get().delContent(session.getUserHash(), token,
new AsyncCallbackSimple<String>() {
@@ -115,7 +115,7 @@
delContent.setConfirmationText(i18n.t("Are you sure?"));
final ActionDescriptor<StateToken> go = new ActionDescriptor<StateToken>(AccessRolDTO.Viewer,
- ActionPosition.itemMenu, new Slot<StateToken>() {
+ ActionPosition.itemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
stateManager.gotoToken(token);
}
@@ -129,7 +129,7 @@
});
final ActionDescriptor<StateToken> rename = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
- ActionPosition.itemMenu, new Slot<StateToken>() {
+ ActionPosition.itemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
contextNavigator.editItem(stateToken);
}
@@ -137,7 +137,7 @@
rename.setTextDescription(i18n.t("Rename"));
final ActionButtonDescriptor<StateToken> goGroupHome = new ActionButtonDescriptor<StateToken>(
- AccessRolDTO.Viewer, ActionPosition.topbar, new Slot<StateToken>() {
+ AccessRolDTO.Viewer, ActionPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
stateManager.gotoToken(token.getGroup());
}
@@ -152,7 +152,7 @@
});
final ActionMenuDescriptor<StateToken> setAsDefGroupContent = new ActionMenuDescriptor<StateToken>(
- AccessRolDTO.Administrator, ActionPosition.itemMenu, new Slot<StateToken>() {
+ AccessRolDTO.Administrator, ActionPosition.itemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken token) {
Site.showProgressProcessing();
contentServiceProvider.get().setAsDefaultContent(session.getUserHash(), token,
@@ -176,7 +176,7 @@
});
final ActionButtonDescriptor<StateToken> refresh = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
- ActionPosition.topbar, new Slot<StateToken>() {
+ ActionPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
stateManager.reload();
contextNavigator.selectItem(stateToken);
@@ -189,7 +189,7 @@
final ActionDescriptor<StateToken> uploadFile = createUploadAction(i18n.t("Upload file"),
"images/nav/upload.png", i18n.t("Upload some files (images, PDFs, ...)"), null);
- session.onInitDataReceived(new Slot<InitDataDTO>() {
+ session.onInitDataReceived(new Listener<InitDataDTO>() {
public void onEvent(final InitDataDTO parameter) {
final ActionDescriptor<StateToken> uploadMedia = createUploadAction(i18n.t("Upload media"),
"images/nav/upload.png", i18n.t("Upload some media (images, videos)"), session
@@ -241,7 +241,7 @@
final String defaultName) {
final ActionMenuDescriptor<StateToken> addFolder;
addFolder = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
- new Slot<StateToken>() {
+ new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
Site.showProgressProcessing();
contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, defaultName,
@@ -264,7 +264,7 @@
final String toolTip, final String permitedExtensions) {
final ActionButtonDescriptor<StateToken> uploadFile;
uploadFile = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.bootombarAndItemMenu,
- new Slot<StateToken>() {
+ new Listener<StateToken>() {
public void onEvent(final StateToken token) {
if (permitedExtensions != null) {
Log.info("Permited extensions (in dev): " + permitedExtensions);
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -33,6 +33,7 @@
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbar;
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
+import org.ourproject.kune.platf.client.app.ToolGroup;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
import org.ourproject.kune.platf.client.services.KuneErrorHandler;
import org.ourproject.kune.platf.client.state.Session;
@@ -49,9 +50,9 @@
import org.ourproject.kune.workspace.client.title.EntitySubTitle;
import org.ourproject.kune.workspace.client.title.EntityTitle;
-import com.calclab.suco.client.module.AbstractModule;
-import com.calclab.suco.client.provider.Factory;
-import com.calclab.suco.client.scope.SingletonScope;
+import com.calclab.suco.client.ioc.decorator.Singleton;
+import com.calclab.suco.client.ioc.module.AbstractModule;
+import com.calclab.suco.client.ioc.module.Factory;
public class DocumentClientModule extends AbstractModule {
@@ -60,51 +61,55 @@
@Override
public void onLoad() {
- final I18nUITranslationService i18n = $(I18nUITranslationService.class);
- final WorkspaceSkeleton ws = $(WorkspaceSkeleton.class);
- register(SingletonScope.class, new Factory<DocumentClientTool>(DocumentClientTool.class) {
+ register(ToolGroup.class, new Factory<DocumentClientTool>(DocumentClientTool.class) {
public DocumentClientTool create() {
$(DocumentClientActions.class);
- return new DocumentClientTool(i18n, $(ToolSelector.class), $(WsThemePresenter.class),
- $(WorkspaceSkeleton.class), $$(DocumentContext.class), $$(ContentServiceAsync.class),
- $(ContentActionRegistry.class), $(DragDropContentRegistry.class), $(ContentIconsRegistry.class));
+ return new DocumentClientTool($(I18nUITranslationService.class), $(ToolSelector.class),
+ $(WsThemePresenter.class), $(WorkspaceSkeleton.class), $$(DocumentContext.class),
+ $$(ContentServiceAsync.class), $(ContentActionRegistry.class),
+ $(DragDropContentRegistry.class), $(ContentIconsRegistry.class));
}
});
- register(SingletonScope.class, new Factory<ContentPublishAction>(ContentPublishAction.class) {
+ register(Singleton.class, new Factory<ContentPublishAction>(ContentPublishAction.class) {
public ContentPublishAction create() {
- return new ContentPublishAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ return new ContentPublishAction($(Session.class), $$(ContentServiceAsync.class),
+ $(I18nUITranslationService.class));
}
}, new Factory<ContentRejectAction>(ContentRejectAction.class) {
public ContentRejectAction create() {
- return new ContentRejectAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ return new ContentRejectAction($(Session.class), $$(ContentServiceAsync.class),
+ $(I18nUITranslationService.class));
}
}, new Factory<ContentEditInProgressAction>(ContentEditInProgressAction.class) {
public ContentEditInProgressAction create() {
- return new ContentEditInProgressAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ return new ContentEditInProgressAction($(Session.class), $$(ContentServiceAsync.class),
+ $(I18nUITranslationService.class));
}
}, new Factory<ContentSubmitForPublishAction>(ContentSubmitForPublishAction.class) {
public ContentSubmitForPublishAction create() {
- return new ContentSubmitForPublishAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ return new ContentSubmitForPublishAction($(Session.class), $$(ContentServiceAsync.class),
+ $(I18nUITranslationService.class));
}
}, new Factory<ContentTrashAction>(ContentTrashAction.class) {
public ContentTrashAction create() {
- return new ContentTrashAction($(Session.class), $$(ContentServiceAsync.class), i18n);
+ return new ContentTrashAction($(Session.class), $$(ContentServiceAsync.class),
+ $(I18nUITranslationService.class));
}
});
- register(SingletonScope.class, new Factory<ContentEditAction>(ContentEditAction.class) {
+ register(Singleton.class, new Factory<ContentEditAction>(ContentEditAction.class) {
public ContentEditAction create() {
- return new ContentEditAction(i18n);
+ return new ContentEditAction($(I18nUITranslationService.class));
}
}, new Factory<ContentTranslationAction>(ContentTranslationAction.class) {
public ContentTranslationAction create() {
- return new ContentTranslationAction(i18n);
+ return new ContentTranslationAction($(I18nUITranslationService.class));
}
});
- register(SingletonScope.class, new Factory<DocumentClientActions>(DocumentClientActions.class) {
+ register(Singleton.class, new Factory<DocumentClientActions>(DocumentClientActions.class) {
public DocumentClientActions create() {
return new DocumentClientActions($(I18nUITranslationService.class), $(ContextNavigator.class),
$(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class),
@@ -112,10 +117,11 @@
}
});
- register(SingletonScope.class, new Factory<DocumentContent>(DocumentContent.class) {
+ register(ToolGroup.class, new Factory<DocumentContent>(DocumentContent.class) {
public DocumentContent create() {
final ActionToolbarPanel contentNavigatorToolbar = new ActionToolbarPanel(
- ActionToolbarPanel.Position.content, $(Session.class), $$(ActionManager.class), ws);
+ ActionToolbarPanel.Position.content, $(Session.class), $$(ActionManager.class),
+ $(WorkspaceSkeleton.class));
final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contentNavigatorToolbar,
$(ContentActionRegistry.class));
@@ -124,10 +130,8 @@
$(RateIt.class), $$(DocumentReader.class), $$(TextEditor.class), $$(FolderViewer.class),
$$(ContentServiceAsync.class), toolbar, $(ContentActionRegistry.class));
final DocumentContentPanel panel = new DocumentContentPanel($(WorkspaceSkeleton.class));
- $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentEditAction.class));
+
$(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
- $(ContentTranslationAction.class));
- $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
$(ContentPublishAction.class));
$(ContentActionRegistry.class)
.addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentRejectAction.class));
@@ -136,23 +140,27 @@
$(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
$(ContentEditInProgressAction.class));
$(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentTrashAction.class));
+
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT, $(ContentEditAction.class));
+ $(ContentActionRegistry.class).addAction(DocumentClientTool.TYPE_DOCUMENT,
+ $(ContentTranslationAction.class));
presenter.init(panel);
return presenter;
}
});
- register(SingletonScope.class, new Factory<AdminContext>(AdminContext.class) {
+ register(Singleton.class, new Factory<AdminContext>(AdminContext.class) {
public AdminContext create() {
final AdminContextPresenter presenter = new AdminContextPresenter($(Session.class),
$(StateManager.class), $$(TagsSummary.class), $$(ContentServiceAsync.class),
$(EntityTitle.class), $(EntitySubTitle.class));
- final AdminContextView view = new AdminContextPanel(presenter, i18n);
+ final AdminContextView view = new AdminContextPanel(presenter, $(I18nUITranslationService.class));
presenter.init(view);
return presenter;
}
});
- register(SingletonScope.class, new Factory<DocumentContext>(DocumentContext.class) {
+ register(Singleton.class, new Factory<DocumentContext>(DocumentContext.class) {
public DocumentContext create() {
final DocumentContextPresenter presenter = new DocumentContextPresenter($(StateManager.class),
$$(ContextNavigator.class), $$(AdminContext.class));
@@ -162,24 +170,20 @@
}
});
- register(SingletonScope.class, new Factory<DocumentReader>(DocumentReader.class) {
+ register(Singleton.class, new Factory<DocumentReader>(DocumentReader.class) {
public DocumentReader create() {
- final DocumentReaderView view = new DocumentReaderPanel(ws);
+ final DocumentReaderView view = new DocumentReaderPanel($(WorkspaceSkeleton.class));
final DocumentReaderPresenter presenter = new DocumentReaderPresenter(view);
return presenter;
}
});
- register(SingletonScope.class, new Factory<FolderViewer>(FolderViewer.class) {
+ register(Singleton.class, new Factory<FolderViewer>(FolderViewer.class) {
public FolderViewer create() {
final FolderViewerView view = new FolderViewerPanel();
final FolderViewerPresenter presenter = new FolderViewerPresenter(view);
return presenter;
}
});
-
- $(DocumentClientTool.class);
- $(DocumentContent.class);
- $(DocumentContext.class);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -31,7 +31,7 @@
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class DocumentClientTool extends AbstractClientTool {
public static final String TYPE_ROOT = "docs.root";
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -6,12 +6,12 @@
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class ContentEditAction extends ActionButtonDescriptor<StateToken> {
public ContentEditAction(final I18nUITranslationService i18n) {
- super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
+ super(AccessRolDTO.Editor, ActionPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
}
});
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentEditInProgressAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ContentEditInProgressAction extends ContentSetStatusAction {
public ContentEditInProgressAction(final Session session, final Provider<ContentServiceAsync> provider,
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentPublishAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ContentPublishAction extends ContentSetStatusAction {
public ContentPublishAction(final Session session, final Provider<ContentServiceAsync> provider,
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentRejectAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ContentRejectAction extends ContentSetStatusAction {
public ContentRejectAction(final Session session, final Provider<ContentServiceAsync> provider,
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSetStatusAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -10,15 +10,15 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
public abstract class ContentSetStatusAction extends ActionMenuDescriptor<StateToken> {
public ContentSetStatusAction(final Session session, final Provider<ContentServiceAsync> contentServiceProvider,
final I18nUITranslationService i18n, final AccessRolDTO rol, final String textDescription,
final ContentStatusDTO status) {
- super(rol, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ super(rol, ActionPosition.topbarAndItemMenu, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
final AsyncCallbackSimple<Object> callback = new AsyncCallbackSimple<Object>() {
public void onSuccess(final Object result) {
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentSubmitForPublishAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ContentSubmitForPublishAction extends ContentSetStatusAction {
public ContentSubmitForPublishAction(final Session session, final Provider<ContentServiceAsync> provider,
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTranslationAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -7,12 +7,12 @@
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class ContentTranslationAction extends ActionButtonDescriptor<StateToken> {
public ContentTranslationAction(final I18nUITranslationService i18n) {
- super(AccessRolDTO.Editor, ActionPosition.topbar, new Slot<StateToken>() {
+ super(AccessRolDTO.Editor, ActionPosition.topbar, new Listener<StateToken>() {
public void onEvent(final StateToken stateToken) {
Site.important(i18n.t("Sorry, this functionality is currently in development"));
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/actions/ContentTrashAction.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class ContentTrashAction extends ContentSetStatusAction {
public ContentTrashAction(final Session session, final Provider<ContentServiceAsync> provider,
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContent.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContent.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContent.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -20,17 +20,17 @@
package org.ourproject.kune.docs.client.cnt;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener0;
public interface DocumentContent {
- void onEditCancelled(Slot0 slot);
+ void onEditCancelled(Listener0 listener);
void onDeleteClicked();
void onEditClicked();
- void onEditing(Slot0 slot);
+ void onEditing(Listener0 listener);
void onSaved();
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/cnt/DocumentContentPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -40,11 +40,11 @@
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Signal0;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Event0;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
+import com.calclab.suco.client.listener.Listener2;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class DocumentContentPresenter implements DocumentContent, TextEditorListener {
@@ -56,8 +56,8 @@
private final Provider<DocumentReader> docReaderProvider;
private final Provider<TextEditor> textEditorProvider;
private final Provider<FolderViewer> folderViewerProvider;
- private final Signal0 onEditing;
- private final Signal0 onEditCancelled;
+ private final Event0 onEditing;
+ private final Event0 onEditCancelled;
private final Provider<ContentServiceAsync> contentServiceProvider;
private final I18nUITranslationService i18n;
private final KuneErrorHandler errorHandler;
@@ -81,16 +81,16 @@
this.contentServiceProvider = contentServiceProvider;
this.toolbar = toolbar;
this.actionRegistry = actionRegistry;
- this.onEditing = new Signal0("onEditing");
- this.onEditCancelled = new Signal0("onEditCancelled");
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ this.onEditing = new Event0("onEditing");
+ this.onEditCancelled = new Event0("onEditCancelled");
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
if (state.getToolName().equals(DocumentClientTool.NAME)) {
setState(state);
}
}
});
- stateManager.onToolChanged(new Slot2<String, String>() {
+ stateManager.onToolChanged(new Listener2<String, String>() {
public void onEvent(final String oldTool, final String newTool) {
if (oldTool != null && oldTool.equals(DocumentClientTool.NAME)) {
// Detach
@@ -122,8 +122,8 @@
textEditorProvider.get().setToolbarVisible(false);
}
- public void onEditCancelled(final Slot0 slot) {
- onEditCancelled.add(slot);
+ public void onEditCancelled(final Listener0 listener) {
+ onEditCancelled.add(listener);
}
public void onEditClicked() {
@@ -146,8 +146,8 @@
});
}
- public void onEditing(final Slot0 slot) {
- onEditing.add(slot);
+ public void onEditing(final Listener0 listener) {
+ onEditing.add(listener);
}
public void onSave(final String text) {
@@ -196,7 +196,7 @@
set = actionRegistry.selectCurrentActions(content.getContainerRights(), typeId);
}
toolbar.disableMenusAndClearButtons();
- toolbar.setActions(set.getToolbarActions(), true);
+ toolbar.showActions(set.getToolbarActions(), true);
showContent();
}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ctx/DocumentContextPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -26,8 +26,8 @@
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
public class DocumentContextPresenter implements DocumentContext {
private DocumentContextView view;
@@ -38,7 +38,7 @@
final Provider<ContextNavigator> contextNavigatorProvider, final Provider<AdminContext> adminContextProvider) {
this.contextNavigatorProvider = contextNavigatorProvider;
this.adminContextProvider = adminContextProvider;
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
if (DocumentClientTool.NAME.equals(state.getToolName())) {
setState(state);
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/ctx/admin/AdminContextPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -38,7 +38,7 @@
import org.ourproject.kune.workspace.client.title.EntitySubTitle;
import org.ourproject.kune.workspace.client.title.EntityTitle;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class AdminContextPresenter implements AdminContext {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionButtonDescriptor.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -2,7 +2,7 @@
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class ActionButtonDescriptor<T> extends ActionDescriptor<T> {
@@ -10,7 +10,7 @@
private ActionButtonSeparator rightSeparator;
public ActionButtonDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
- final Slot<T> onPerformCall) {
+ final Listener<T> onPerformCall) {
super(accessRolDTO, actionPosition, onPerformCall);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionDescriptor.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -3,7 +3,7 @@
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.services.ImageDescriptor;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class ActionDescriptor<T> {
@@ -16,8 +16,8 @@
private String confirmationTitle;
private String confirmationText;
- private final Slot<T> onPerformCall;
- private final Slot<T> onNotConfirmed;
+ private final Listener<T> onPerformCall;
+ private final Listener<T> onNotConfirmed;
private AccessRolDTO accessRol;
@@ -26,7 +26,7 @@
private ActionEnableCondition<T> enableCondition;
public ActionDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
- final Slot<T> onPerformCall) {
+ final Listener<T> onPerformCall) {
accessRol = accessRolDTO;
this.actionPosition = actionPosition;
this.onPerformCall = onPerformCall;
@@ -35,7 +35,7 @@
}
public ActionDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
- final Slot<T> onPerformCall, final ActionEnableCondition<T> enableCondition) {
+ final Listener<T> onPerformCall, final ActionEnableCondition<T> enableCondition) {
this(accessRolDTO, actionPosition, onPerformCall);
this.enableCondition = enableCondition;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionManager.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -2,7 +2,7 @@
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener0;
public class ActionManager {
@@ -14,11 +14,11 @@
public void doAction(final ActionDescriptor<?> action, final Object parameter) {
if (action.isMustBeConfirmed()) {
- ws.askConfirmation(action.getConfirmationTitle(), action.getConfirmationText(), new Slot0() {
+ ws.askConfirmation(action.getConfirmationTitle(), action.getConfirmationText(), new Listener0() {
public void onEvent() {
action.fireOnPerformCall(parameter);
}
- }, new Slot0() {
+ }, new Listener0() {
public void onEvent() {
action.fireOnNotConfirmed(parameter);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/ActionMenuDescriptor.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -3,7 +3,7 @@
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class ActionMenuDescriptor<T> extends ActionDescriptor<T> {
@@ -12,7 +12,7 @@
private String parentSubMenuTitle;
public ActionMenuDescriptor(final AccessRolDTO accessRolDTO, final ActionPosition actionPosition,
- final Slot<T> onPerformCall) {
+ final Listener<T> onPerformCall) {
super(accessRolDTO, actionPosition, onPerformCall);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbar.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,6 +9,6 @@
void disableMenusAndClearButtons();
- void setActions(ActionCollection<StateToken> actionCollection, boolean isItemSelected);
+ void showActions(ActionCollection<StateToken> actionCollection, boolean isItemSelected);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -13,7 +13,7 @@
import org.ourproject.kune.workspace.client.skel.Toolbar;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.Button;
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/actions/toolbar/ActionToolbarPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -11,14 +11,14 @@
import com.allen_sauer.gwt.log.client.Log;
public class ActionToolbarPresenter implements ActionToolbar {
- private final ActionToolbarPanel toolbar;
+ private final ActionToolbarView toolbar;
private final Session session;
private final ActionRegistry<StateToken> actionRegistry;
- public ActionToolbarPresenter(final Session session, final ActionToolbarPanel actionToolbarPanel,
+ public ActionToolbarPresenter(final Session session, final ActionToolbarView toolbar,
final ActionRegistry<StateToken> actionRegistry) {
this.session = session;
- toolbar = actionToolbarPanel;
+ this.toolbar = toolbar;
this.actionRegistry = actionRegistry;
}
@@ -31,7 +31,7 @@
toolbar.disableAllMenuItems();
}
- public void setActions(final ActionCollection<StateToken> actions, final boolean isItemSelected) {
+ public void showActions(final ActionCollection<StateToken> actions, final boolean isItemSelected) {
for (final ActionDescriptor<StateToken> action : actions) {
if (action instanceof ActionMenuDescriptor) {
toolbar.addMenuAction((ActionMenuDescriptor<StateToken>) action, isItemSelected
@@ -48,5 +48,4 @@
}
}
}
-
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/app/Application.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/app/Application.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/app/Application.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -20,13 +20,13 @@
package org.ourproject.kune.platf.client.app;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener0;
public interface Application {
- void onApplicationStart(Slot0 slot);
+ void onApplicationStart(Listener0 listener);
- void onApplicationStop(Slot0 slot);
+ void onApplicationStop(Listener0 listener);
void start();
Added: trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationComponentGroup.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationComponentGroup.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationComponentGroup.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,7 @@
+package org.ourproject.kune.platf.client.app;
+
+import com.calclab.suco.client.ioc.decorator.GroupedSingleton;
+
+public class ApplicationComponentGroup extends GroupedSingleton {
+
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/app/ApplicationDefault.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -28,8 +28,8 @@
import org.ourproject.kune.workspace.client.site.Site;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.signal.Signal0;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Event0;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Timer;
@@ -40,13 +40,13 @@
public class ApplicationDefault implements Application {
private final Session session;
- private final Signal0 onApplicationStart;
- private final Signal0 onApplicationStop;
+ private final Event0 onApplicationStart;
+ private final Event0 onApplicationStop;
public ApplicationDefault(final Session session) {
this.session = session;
- this.onApplicationStart = new Signal0("onApplicationStart");
- this.onApplicationStop = new Signal0("onApplicationStop");
+ this.onApplicationStart = new Event0("onApplicationStart");
+ this.onApplicationStop = new Event0("onApplicationStop");
Window.addWindowCloseListener(new WindowCloseListener() {
public void onWindowClosed() {
stop();
@@ -58,12 +58,12 @@
});
}
- public void onApplicationStart(final Slot0 slot) {
- onApplicationStart.add(slot);
+ public void onApplicationStart(final Listener0 listener) {
+ onApplicationStart.add(listener);
}
- public void onApplicationStop(final Slot0 slot) {
- onApplicationStop.add(slot);
+ public void onApplicationStop(final Listener0 listener) {
+ onApplicationStop.add(listener);
}
public void start() {
Added: trunk/src/main/java/org/ourproject/kune/platf/client/app/ToolGroup.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/app/ToolGroup.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/app/ToolGroup.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,6 @@
+package org.ourproject.kune.platf.client.app;
+
+import com.calclab.suco.client.ioc.decorator.GroupedSingleton;
+
+public class ToolGroup extends GroupedSingleton {
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/ChatUserParamsDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/ChatUserParamsDTO.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/ChatUserParamsDTO.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,7 +1,6 @@
package org.ourproject.kune.platf.client.dto;
-import com.calclab.emite.client.im.roster.RosterManager;
-import com.calclab.emite.client.im.roster.RosterManager.SubscriptionMode;
+import com.calclab.emiteuimodule.client.SubscriptionMode;
import com.google.gwt.user.client.rpc.IsSerializable;
public class ChatUserParamsDTO implements IsSerializable {
@@ -34,7 +33,7 @@
return chatColor;
}
- public RosterManager.SubscriptionMode getSubscriptionMode() {
+ public SubscriptionMode getSubscriptionMode() {
return subscriptionMode;
}
@@ -54,7 +53,7 @@
this.publishRoster = publishRoster;
}
- public void setSubscriptionMode(final RosterManager.SubscriptionMode subscriptionMode) {
+ public void setSubscriptionMode(final SubscriptionMode subscriptionMode) {
this.subscriptionMode = subscriptionMode;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserDTO.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserDTO.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/dto/UserDTO.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -19,7 +19,7 @@
*/
package org.ourproject.kune.platf.client.dto;
-import com.calclab.emite.client.im.roster.RosterManager.SubscriptionMode;
+import com.calclab.emiteuimodule.client.SubscriptionMode;
import com.google.gwt.user.client.rpc.IsSerializable;
public class UserDTO implements IsSerializable {
@@ -37,120 +37,120 @@
private String chatColor;
public UserDTO() {
- this(null, null, null, null, null, null, null, null, true, null, null);
+ this(null, null, null, null, null, null, null, null, true, null, null);
}
public UserDTO(final String name, final String shortName, final String password, final String email,
- final I18nLanguageDTO language, final I18nCountryDTO country, final TimeZoneDTO timezone,
- final String avatar, final boolean publishRoster, final SubscriptionMode subscriptionMode,
- final String chatColor) {
- this.name = name;
- this.shortName = shortName;
- this.password = password;
- this.email = email;
- this.language = language;
- this.country = country;
- this.timezone = timezone;
- this.avatar = avatar;
- this.publishRoster = publishRoster;
- this.subscriptionMode = subscriptionMode;
- this.chatColor = chatColor;
+ final I18nLanguageDTO language, final I18nCountryDTO country, final TimeZoneDTO timezone,
+ final String avatar, final boolean publishRoster, final SubscriptionMode subscriptionMode,
+ final String chatColor) {
+ this.name = name;
+ this.shortName = shortName;
+ this.password = password;
+ this.email = email;
+ this.language = language;
+ this.country = country;
+ this.timezone = timezone;
+ this.avatar = avatar;
+ this.publishRoster = publishRoster;
+ this.subscriptionMode = subscriptionMode;
+ this.chatColor = chatColor;
}
public String getAvatar() {
- return avatar;
+ return avatar;
}
public String getChatColor() {
- return chatColor;
+ return chatColor;
}
public I18nCountryDTO getCountry() {
- return country;
+ return country;
}
public String getEmail() {
- return email;
+ return email;
}
public Long getId() {
- return id;
+ return id;
}
public I18nLanguageDTO getLanguage() {
- return language;
+ return language;
}
public String getName() {
- return name;
+ return name;
}
public String getPassword() {
- return password;
+ return password;
}
public String getShortName() {
- return shortName;
+ return shortName;
}
public SubscriptionMode getSubscriptionMode() {
- return subscriptionMode;
+ return subscriptionMode;
}
public TimeZoneDTO getTimezone() {
- return timezone;
+ return timezone;
}
public boolean isPublishRoster() {
- return publishRoster;
+ return publishRoster;
}
public void setAvatar(final String avatar) {
- this.avatar = avatar;
+ this.avatar = avatar;
}
public void setChatColor(final String chatColor) {
- this.chatColor = chatColor;
+ this.chatColor = chatColor;
}
public void setCountry(final I18nCountryDTO country) {
- this.country = country;
+ this.country = country;
}
public void setEmail(final String email) {
- this.email = email;
+ this.email = email;
}
public void setId(final Long id) {
- this.id = id;
+ this.id = id;
}
public void setLanguage(final I18nLanguageDTO language) {
- this.language = language;
+ this.language = language;
}
public void setName(final String name) {
- this.name = name;
+ this.name = name;
}
public void setPassword(final String password) {
- this.password = password;
+ this.password = password;
}
public void setPublishRoster(final boolean publishRoster) {
- this.publishRoster = publishRoster;
+ this.publishRoster = publishRoster;
}
public void setShortName(final String shortName) {
- this.shortName = shortName;
+ this.shortName = shortName;
}
public void setSubscriptionMode(final SubscriptionMode subscriptionMode) {
- this.subscriptionMode = subscriptionMode;
+ this.subscriptionMode = subscriptionMode;
}
public void setTimezone(final TimeZoneDTO timezone) {
- this.timezone = timezone;
+ this.timezone = timezone;
}
}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/client/services/Kune.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/Kune.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/Kune.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (C) 2007-2008 The kune development team (see CREDITS for details)
- * This file is part of kune.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package org.ourproject.kune.platf.client.services;
-
-import com.calclab.suco.client.Suco;
-import com.calclab.suco.client.container.Container;
-import com.calclab.suco.client.container.DelegatedContainer;
-import com.calclab.suco.client.module.Module;
-import com.calclab.suco.client.module.ModuleManager.ProviderRegisterStrategy;
-
-public class Kune extends DelegatedContainer {
-
- public static Kune create(final Module... modules) {
- final Container container = Suco.create(modules);
- Suco.install(container, ProviderRegisterStrategy.registerOnlyIfNotRegistered, new KuneModule());
- return container.getInstance(Kune.class);
- }
-
- protected Kune(final Container container) {
- super(container);
- }
-
-}
Added: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneCoreModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneCoreModule.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneCoreModule.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,15 @@
+package org.ourproject.kune.platf.client.services;
+
+import org.ourproject.kune.platf.client.app.ApplicationComponentGroup;
+import org.ourproject.kune.platf.client.app.ToolGroup;
+
+import com.calclab.suco.client.ioc.module.AbstractModule;
+
+public class KuneCoreModule extends AbstractModule {
+
+ @Override
+ public void onLoad() {
+ registerDecorator(ApplicationComponentGroup.class, new ApplicationComponentGroup());
+ registerDecorator(ToolGroup.class, new ToolGroup());
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneErrorHandler.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -34,9 +34,9 @@
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Signal0;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Event0;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException;
@@ -44,7 +44,7 @@
private final Session session;
private final I18nTranslationService i18n;
private final Provider<WorkspaceSkeleton> wsProvider;
- private final Signal0 onSessionExpired;
+ private final Event0 onSessionExpired;
private final Provider<StateManager> stateManagerProvider;
public KuneErrorHandler(final Session session, final I18nTranslationService i18n,
@@ -53,7 +53,7 @@
this.i18n = i18n;
this.wsProvider = wsProvider;
this.stateManagerProvider = stateManagerProvider;
- this.onSessionExpired = new Signal0("onSessionExpired");
+ this.onSessionExpired = new Event0("onSessionExpired");
}
public void doSessionExpired() {
@@ -66,8 +66,8 @@
return wsProvider.get();
}
- public void onSessionExpired(final Slot0 slot) {
- onSessionExpired.add(slot);
+ public void onSessionExpired(final Listener0 listener) {
+ onSessionExpired.add(listener);
}
public void process(final Throwable caught) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/services/KuneModule.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,7 +1,5 @@
package org.ourproject.kune.platf.client.services;
-import org.ourproject.kune.chat.client.ChatClientModule;
-import org.ourproject.kune.docs.client.DocumentClientModule;
import org.ourproject.kune.platf.client.actions.ActionManager;
import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
@@ -11,9 +9,11 @@
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPanel;
import org.ourproject.kune.platf.client.actions.toolbar.ActionToolbarPresenter;
import org.ourproject.kune.platf.client.app.Application;
+import org.ourproject.kune.platf.client.app.ApplicationComponentGroup;
import org.ourproject.kune.platf.client.app.ApplicationDefault;
import org.ourproject.kune.platf.client.app.HistoryWrapper;
import org.ourproject.kune.platf.client.app.HistoryWrapperDefault;
+import org.ourproject.kune.platf.client.app.ToolGroup;
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
import org.ourproject.kune.platf.client.rpc.ContentService;
@@ -140,14 +140,11 @@
import org.ourproject.kune.workspace.client.title.EntityTitlePanel;
import org.ourproject.kune.workspace.client.title.EntityTitlePresenter;
-import com.calclab.emiteuimodule.client.EmiteUIModule;
-import com.calclab.suco.client.container.Container;
-import com.calclab.suco.client.module.AbstractModule;
-import com.calclab.suco.client.module.ModuleManager.ProviderRegisterStrategy;
-import com.calclab.suco.client.provider.Factory;
-import com.calclab.suco.client.scope.SingletonScope;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.ioc.decorator.Singleton;
+import com.calclab.suco.client.ioc.module.AbstractModule;
+import com.calclab.suco.client.ioc.module.Factory;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.History;
@@ -157,13 +154,8 @@
@Override
public void onLoad() {
- register(SingletonScope.class, new Factory<Kune>(Kune.class) {
- public Kune create() {
- return new Kune($(Container.class));
- }
- });
- register(SingletonScope.class, new Factory<Session>(Session.class) {
+ register(Singleton.class, new Factory<Session>(Session.class) {
public Session create() {
return new SessionDefault(Cookies.getCookie(Site.USERHASH), $$(UserServiceAsync.class));
}
@@ -202,10 +194,10 @@
}
});
- register(SingletonScope.class, new Factory<I18nUITranslationService>(I18nUITranslationService.class) {
+ register(Singleton.class, new Factory<I18nUITranslationService>(I18nUITranslationService.class) {
public I18nUITranslationService create() {
final I18nUITranslationService i18n = new I18nUITranslationService();
- i18n.init($(I18nServiceAsync.class), $(Session.class), new Slot0() {
+ i18n.init($(I18nServiceAsync.class), $(Session.class), new Listener0() {
public void onEvent() {
onI18nReady();
}
@@ -220,21 +212,17 @@
private void onI18nReady() {
final I18nUITranslationService i18n = $(I18nUITranslationService.class);
- register(SingletonScope.class, new Factory<I18nTranslationService>(I18nTranslationService.class) {
+ if (container.hasProvider(I18nTranslationService.class)) {
+ container.removeProvider(I18nTranslationService.class);
+ }
+
+ register(Singleton.class, new Factory<I18nTranslationService>(I18nTranslationService.class) {
public I18nTranslationService create() {
return i18n;
}
});
- register(SingletonScope.class, new Factory<QuickTipsHelper>(QuickTipsHelper.class) {
- public QuickTipsHelper create() {
- return new QuickTipsHelper();
- }
- });
-
- $(QuickTipsHelper.class);
-
- register(SingletonScope.class, new Factory<HistoryWrapper>(HistoryWrapper.class) {
+ register(Singleton.class, new Factory<HistoryWrapper>(HistoryWrapper.class) {
public HistoryWrapper create() {
return new HistoryWrapperDefault();
}
@@ -251,13 +239,13 @@
}
});
- register(SingletonScope.class, new Factory<KuneErrorHandler>(KuneErrorHandler.class) {
+ register(Singleton.class, new Factory<KuneErrorHandler>(KuneErrorHandler.class) {
public KuneErrorHandler create() {
return new KuneErrorHandler($(Session.class), i18n, $$(WorkspaceSkeleton.class), $$(StateManager.class));
}
});
- register(SingletonScope.class, new Factory<Images>(Images.class) {
+ register(Singleton.class, new Factory<Images>(Images.class) {
public Images create() {
return Images.App.getInstance();
}
@@ -267,34 +255,32 @@
}
});
- register(SingletonScope.class, new Factory<WorkspaceSkeleton>(WorkspaceSkeleton.class) {
+ register(Singleton.class, new Factory<WorkspaceSkeleton>(WorkspaceSkeleton.class) {
public WorkspaceSkeleton create() {
return new WorkspaceSkeleton();
}
});
- final KuneErrorHandler errorHandler = $(KuneErrorHandler.class);
- AsyncCallbackSimple.init(errorHandler);
+ AsyncCallbackSimple.init($(KuneErrorHandler.class));
final WorkspaceSkeleton ws = $(WorkspaceSkeleton.class);
- final Images images = $(Images.class);
-
- register(SingletonScope.class, new Factory<Application>(Application.class) {
+ register(Singleton.class, new Factory<Application>(Application.class) {
public Application create() {
return new ApplicationDefault($(Session.class));
}
+
+ @Override
+ public void onAfterCreated(final Application instance) {
+ }
});
- register(SingletonScope.class, new Factory<SitePublicSpaceLink>(SitePublicSpaceLink.class) {
- public SitePublicSpaceLink create() {
- final SitePublicSpaceLinkPresenter presenter = new SitePublicSpaceLinkPresenter($(StateManager.class));
- final SitePublicSpaceLinkPanel panel = new SitePublicSpaceLinkPanel(presenter, ws, i18n, images);
- presenter.init(panel);
- return presenter;
+ register(ApplicationComponentGroup.class, new Factory<QuickTipsHelper>(QuickTipsHelper.class) {
+ public QuickTipsHelper create() {
+ return new QuickTipsHelper();
}
});
- register(SingletonScope.class, new Factory<SiteProgress>(SiteProgress.class) {
+ register(ApplicationComponentGroup.class, new Factory<SiteProgress>(SiteProgress.class) {
public SiteProgress create() {
final SiteProgressPresenter presenter = new SiteProgressPresenter();
final SiteProgressPanel panel = new SiteProgressPanel(presenter, $$(SitePublicSpaceLink.class));
@@ -303,13 +289,23 @@
}
});
- register(SingletonScope.class, new Factory<Site>(Site.class) {
+ register(ApplicationComponentGroup.class, new Factory<Site>(Site.class) {
public Site create() {
return new Site(i18n, $(SiteProgress.class), $$(SiteMessage.class));
}
});
- register(SingletonScope.class, new Factory<SiteMessage>(SiteMessage.class) {
+ register(ApplicationComponentGroup.class, new Factory<SitePublicSpaceLink>(SitePublicSpaceLink.class) {
+ public SitePublicSpaceLink create() {
+ final SitePublicSpaceLinkPresenter presenter = new SitePublicSpaceLinkPresenter($(StateManager.class));
+ final SitePublicSpaceLinkPanel panel = new SitePublicSpaceLinkPanel(presenter, ws, i18n,
+ $(Images.class));
+ presenter.init(panel);
+ return presenter;
+ }
+ });
+
+ register(ApplicationComponentGroup.class, new Factory<SiteMessage>(SiteMessage.class) {
public SiteMessage create() {
final SiteMessagePresenter siteMessagePresenter = new SiteMessagePresenter();
final SiteMessageView siteMessageView = new SiteMessagePanel(siteMessagePresenter, true, i18n);
@@ -318,29 +314,26 @@
}
});
- $(SiteProgress.class);
- $(Site.class);
-
- register(SingletonScope.class, new Factory<SiteSignInLink>(SiteSignInLink.class) {
- public SiteSignInLink create() {
- final SiteSignInLinkPresenter presenter = new SiteSignInLinkPresenter($(Session.class));
- final SiteSignInLinkPanel panel = new SiteSignInLinkPanel(presenter, i18n, ws);
+ register(ApplicationComponentGroup.class, new Factory<SiteUserMenu>(SiteUserMenu.class) {
+ public SiteUserMenu create() {
+ final SiteUserMenuPresenter presenter = new SiteUserMenuPresenter($(Session.class),
+ $(StateManager.class));
+ final SiteUserMenuPanel panel = new SiteUserMenuPanel(presenter, ws, i18n);
presenter.init(panel);
return presenter;
}
});
- register(SingletonScope.class, new Factory<SiteUserMenu>(SiteUserMenu.class) {
- public SiteUserMenu create() {
- final SiteUserMenuPresenter presenter = new SiteUserMenuPresenter($(Session.class),
- $(StateManager.class));
- final SiteUserMenuPanel panel = new SiteUserMenuPanel(presenter, ws, i18n);
+ register(ApplicationComponentGroup.class, new Factory<SiteSignInLink>(SiteSignInLink.class) {
+ public SiteSignInLink create() {
+ final SiteSignInLinkPresenter presenter = new SiteSignInLinkPresenter($(Session.class));
+ final SiteSignInLinkPanel panel = new SiteSignInLinkPanel(presenter, i18n, ws);
presenter.init(panel);
return presenter;
}
});
- register(SingletonScope.class, new Factory<SiteSignOutLink>(SiteSignOutLink.class) {
+ register(ApplicationComponentGroup.class, new Factory<SiteSignOutLink>(SiteSignOutLink.class) {
public SiteSignOutLink create() {
final SiteSignOutLinkPresenter presenter = new SiteSignOutLinkPresenter($(Session.class),
$$(UserServiceAsync.class), $$(KuneErrorHandler.class));
@@ -350,7 +343,7 @@
}
});
- register(SingletonScope.class, new Factory<SiteNewGroupLink>(SiteNewGroupLink.class) {
+ register(ApplicationComponentGroup.class, new Factory<SiteNewGroupLink>(SiteNewGroupLink.class) {
public SiteNewGroupLink create() {
final SiteNewGroupLinkPresenter presenter = new SiteNewGroupLinkPresenter();
final SiteNewGroupLinkPanel panel = new SiteNewGroupLinkPanel(presenter, ws, i18n);
@@ -359,7 +352,7 @@
}
});
- register(SingletonScope.class, new Factory<SiteOptions>(SiteOptions.class) {
+ register(ApplicationComponentGroup.class, new Factory<SiteOptions>(SiteOptions.class) {
public SiteOptions create() {
final SiteOptionsPresenter presenter = new SiteOptionsPresenter();
final SiteOptionsPanel panel = new SiteOptionsPanel(presenter, ws, i18n, $$(I18nTranslator.class));
@@ -368,7 +361,7 @@
}
});
- register(SingletonScope.class, new Factory<SiteLogo>(SiteLogo.class) {
+ register(ApplicationComponentGroup.class, new Factory<SiteLogo>(SiteLogo.class) {
public SiteLogo create() {
final SiteLogoPresenter presenter = new SiteLogoPresenter($(Session.class));
final SiteLogoPanel panel = new SiteLogoPanel(presenter, ws);
@@ -377,26 +370,7 @@
}
});
- register(SingletonScope.class, new Factory<SiteSearcher>(SiteSearcher.class) {
- public SiteSearcher create() {
- final SiteSearcherPresenter presenter = new SiteSearcherPresenter($$(StateManager.class));
- final SiteSearcherView view = new SiteSearcherPanel(presenter, i18n, ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(SingletonScope.class, new Factory<I18nTranslator>(I18nTranslator.class) {
- public I18nTranslator create() {
- final I18nTranslatorPresenter presenter = new I18nTranslatorPresenter($(Session.class),
- $(I18nServiceAsync.class), i18n);
- final I18nTranslatorView view = new I18nTranslatorPanel(presenter, i18n, $(LanguageSelector.class), ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(SingletonScope.class, new Factory<SiteSearch>(SiteSearch.class) {
+ register(ApplicationComponentGroup.class, new Factory<SiteSearch>(SiteSearch.class) {
public SiteSearch create() {
final SiteSearchPresenter presenter = new SiteSearchPresenter($$(SiteSearcher.class));
final SiteSearchPanel panel = new SiteSearchPanel(presenter, ws, i18n);
@@ -405,36 +379,7 @@
}
});
- register(SingletonScope.class, new Factory<SignIn>(SignIn.class) {
- public SignIn create() {
- final SignInPresenter presenter = new SignInPresenter($(Session.class), $(StateManager.class), i18n,
- $(UserServiceAsync.class));
- final SignInPanel view = new SignInPanel(presenter, i18n, ws);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(SingletonScope.class, new Factory<LicenseChoose>(LicenseChoose.class) {
- public LicenseChoose create() {
- final LicenseChoosePresenter presenter = new LicenseChoosePresenter($(Session.class));
- final LicenseChoosePanel view = new LicenseChoosePanel(presenter, i18n);
- presenter.init(view);
- return presenter;
- }
- });
-
- register(SingletonScope.class, new Factory<NewGroup>(NewGroup.class) {
- public NewGroup create() {
- final NewGroupPresenter presenter = new NewGroupPresenter(i18n, $(Session.class),
- $(StateManager.class), $$(GroupServiceAsync.class));
- final NewGroupPanel view = new NewGroupPanel(presenter, i18n, $$(LicenseChoose.class));
- presenter.init(view);
- return presenter;
- }
- });
-
- register(SingletonScope.class, new Factory<EntityLogo>(EntityLogo.class) {
+ register(ApplicationComponentGroup.class, new Factory<EntityLogo>(EntityLogo.class) {
public EntityLogo create() {
final EntityLogoPresenter presenter = new EntityLogoPresenter($(StateManager.class),
$(WsThemePresenter.class));
@@ -444,7 +389,7 @@
}
});
- register(SingletonScope.class, new Factory<WsThemePresenter>(WsThemePresenter.class) {
+ register(ApplicationComponentGroup.class, new Factory<WsThemePresenter>(WsThemePresenter.class) {
public WsThemePresenter create() {
final WsThemePresenter presenter = new WsThemePresenter($(Session.class), $$(GroupServiceAsync.class),
$(StateManager.class));
@@ -454,7 +399,7 @@
}
});
- register(SingletonScope.class, new Factory<EntityTitle>(EntityTitle.class) {
+ register(ApplicationComponentGroup.class, new Factory<EntityTitle>(EntityTitle.class) {
public EntityTitle create() {
final EntityTitlePresenter presenter = new EntityTitlePresenter(i18n, $(KuneErrorHandler.class),
$(StateManager.class), $(Session.class), $$(ContentServiceAsync.class),
@@ -465,7 +410,7 @@
}
});
- register(SingletonScope.class, new Factory<EntitySubTitle>(EntitySubTitle.class) {
+ register(ApplicationComponentGroup.class, new Factory<EntitySubTitle>(EntitySubTitle.class) {
public EntitySubTitle create() {
final EntitySubTitlePresenter presenter = new EntitySubTitlePresenter(i18n, $(StateManager.class));
final EntitySubTitlePanel panel = new EntitySubTitlePanel(presenter, i18n, ws);
@@ -474,7 +419,7 @@
}
});
- register(SingletonScope.class, new Factory<EntityLicensePresenter>(EntityLicensePresenter.class) {
+ register(ApplicationComponentGroup.class, new Factory<EntityLicensePresenter>(EntityLicensePresenter.class) {
public EntityLicensePresenter create() {
final EntityLicensePresenter presenter = new EntityLicensePresenter($(StateManager.class));
final EntityLicensePanel panel = new EntityLicensePanel(presenter, i18n, ws);
@@ -483,7 +428,7 @@
}
});
- register(SingletonScope.class, new Factory<RatePresenter>(RatePresenter.class) {
+ register(ApplicationComponentGroup.class, new Factory<RatePresenter>(RatePresenter.class) {
public RatePresenter create() {
final RatePresenter presenter = new RatePresenter($(StateManager.class));
final RatePanel panel = new RatePanel(null, null, i18n, ws);
@@ -492,7 +437,7 @@
}
});
- register(SingletonScope.class, new Factory<RateIt>(RateIt.class) {
+ register(ApplicationComponentGroup.class, new Factory<RateIt>(RateIt.class) {
public RateIt create() {
final RateItPresenter presenter = new RateItPresenter(i18n, $(Session.class),
$$(ContentServiceAsync.class), $(StateManager.class));
@@ -502,7 +447,7 @@
}
});
- register(SingletonScope.class, new Factory<GroupMembersSummary>(GroupMembersSummary.class) {
+ register(ApplicationComponentGroup.class, new Factory<GroupMembersSummary>(GroupMembersSummary.class) {
public GroupMembersSummary create() {
final GroupMembersSummaryPresenter presenter = new GroupMembersSummaryPresenter(i18n,
$(StateManager.class), $(ImageUtils.class), $(Session.class),
@@ -513,7 +458,7 @@
}
});
- register(SingletonScope.class, new Factory<GroupSummary>(GroupSummary.class) {
+ register(ApplicationComponentGroup.class, new Factory<GroupSummary>(GroupSummary.class) {
public GroupSummary create() {
final GroupSummaryPresenter presenter = new GroupSummaryPresenter($(StateManager.class),
$(WsThemePresenter.class));
@@ -523,7 +468,7 @@
}
});
- register(SingletonScope.class, new Factory<ParticipationSummary>(ParticipationSummary.class) {
+ register(ApplicationComponentGroup.class, new Factory<ParticipationSummary>(ParticipationSummary.class) {
public ParticipationSummary create() {
final ParticipationSummaryPresenter presenter = new ParticipationSummaryPresenter(i18n,
$(StateManager.class), $(ImageUtils.class), $(Session.class),
@@ -534,7 +479,7 @@
}
});
- register(SingletonScope.class, new Factory<TagsSummary>(TagsSummary.class) {
+ register(ApplicationComponentGroup.class, new Factory<TagsSummary>(TagsSummary.class) {
public TagsSummary create() {
final TagsSummaryPresenter presenter = new TagsSummaryPresenter($(Session.class),
$$(SiteSearcher.class), $(StateManager.class), $(WsThemePresenter.class));
@@ -544,7 +489,55 @@
}
});
- register(SingletonScope.class, new Factory<UserLiveSearcher>(UserLiveSearcher.class) {
+ register(Singleton.class, new Factory<SiteSearcher>(SiteSearcher.class) {
+ public SiteSearcher create() {
+ final SiteSearcherPresenter presenter = new SiteSearcherPresenter($$(StateManager.class));
+ final SiteSearcherView view = new SiteSearcherPanel(presenter, i18n, ws);
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(Singleton.class, new Factory<I18nTranslator>(I18nTranslator.class) {
+ public I18nTranslator create() {
+ final I18nTranslatorPresenter presenter = new I18nTranslatorPresenter($(Session.class),
+ $(I18nServiceAsync.class), i18n);
+ final I18nTranslatorView view = new I18nTranslatorPanel(presenter, i18n, $(LanguageSelector.class), ws);
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(Singleton.class, new Factory<SignIn>(SignIn.class) {
+ public SignIn create() {
+ final SignInPresenter presenter = new SignInPresenter($(Session.class), $(StateManager.class), i18n,
+ $(UserServiceAsync.class));
+ final SignInPanel view = new SignInPanel(presenter, i18n, ws);
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(Singleton.class, new Factory<LicenseChoose>(LicenseChoose.class) {
+ public LicenseChoose create() {
+ final LicenseChoosePresenter presenter = new LicenseChoosePresenter($(Session.class));
+ final LicenseChoosePanel view = new LicenseChoosePanel(presenter, i18n);
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(Singleton.class, new Factory<NewGroup>(NewGroup.class) {
+ public NewGroup create() {
+ final NewGroupPresenter presenter = new NewGroupPresenter(i18n, $(Session.class),
+ $(StateManager.class), $$(GroupServiceAsync.class));
+ final NewGroupPanel view = new NewGroupPanel(presenter, i18n, $$(LicenseChoose.class));
+ presenter.init(view);
+ return presenter;
+ }
+ });
+
+ register(Singleton.class, new Factory<UserLiveSearcher>(UserLiveSearcher.class) {
public UserLiveSearcher create() {
final UserLiveSearcherPresenter presenter = new UserLiveSearcherPresenter();
final EntityLiveSearcherView view = new UserLiveSearcherPanel(presenter, i18n);
@@ -553,7 +546,7 @@
}
});
- register(SingletonScope.class, new Factory<GroupLiveSearcher>(GroupLiveSearcher.class) {
+ register(Singleton.class, new Factory<GroupLiveSearcher>(GroupLiveSearcher.class) {
public GroupLiveSearcher create() {
final GroupLiveSearcherPresenter presenter = new GroupLiveSearcherPresenter();
final EntityLiveSearcherView view = new GroupLiveSearchPanel(presenter, i18n);
@@ -562,7 +555,7 @@
}
});
- register(SingletonScope.class, new Factory<ToolSelector>(ToolSelector.class) {
+ register(Singleton.class, new Factory<ToolSelector>(ToolSelector.class) {
public ToolSelector create() {
final ToolSelectorPresenter presenter = new ToolSelectorPresenter($(StateManager.class),
$(WsThemePresenter.class));
@@ -570,7 +563,7 @@
}
});
- register(SingletonScope.class, new Factory<TextEditor>(TextEditor.class) {
+ register(Singleton.class, new Factory<TextEditor>(TextEditor.class) {
public TextEditor create() {
final TextEditorPresenter presenter = new TextEditorPresenter(null, true);
final TextEditorPanel panel = new TextEditorPanel(presenter, i18n, ws);
@@ -579,7 +572,7 @@
}
});
- register(SingletonScope.class, new Factory<LanguageSelector>(LanguageSelector.class) {
+ register(Singleton.class, new Factory<LanguageSelector>(LanguageSelector.class) {
public LanguageSelector create() {
final LanguageSelectorPresenter presenter = new LanguageSelectorPresenter($(Session.class));
final LanguageSelectorView view = new LanguageSelectorPanel(presenter, i18n);
@@ -588,42 +581,42 @@
}
});
- register(SingletonScope.class, new Factory<ActionManager>(ActionManager.class) {
+ register(Singleton.class, new Factory<ActionManager>(ActionManager.class) {
public ActionManager create() {
return new ActionManager(ws);
}
});
- register(SingletonScope.class, new Factory<ContextActionRegistry>(ContextActionRegistry.class) {
+ register(Singleton.class, new Factory<ContextActionRegistry>(ContextActionRegistry.class) {
public ContextActionRegistry create() {
return new ContextActionRegistry();
}
});
- register(SingletonScope.class, new Factory<ContentActionRegistry>(ContentActionRegistry.class) {
+ register(Singleton.class, new Factory<ContentActionRegistry>(ContentActionRegistry.class) {
public ContentActionRegistry create() {
return new ContentActionRegistry();
}
});
- register(SingletonScope.class, new Factory<DragDropContentRegistry>(DragDropContentRegistry.class) {
+ register(Singleton.class, new Factory<DragDropContentRegistry>(DragDropContentRegistry.class) {
public DragDropContentRegistry create() {
return new DragDropContentRegistry();
}
});
- register(SingletonScope.class, new Factory<ContentIconsRegistry>(ContentIconsRegistry.class) {
+ register(Singleton.class, new Factory<ContentIconsRegistry>(ContentIconsRegistry.class) {
public ContentIconsRegistry create() {
return new ContentIconsRegistry();
}
});
- register(SingletonScope.class, new Factory<ContextNavigator>(ContextNavigator.class) {
+ register(Singleton.class, new Factory<ContextNavigator>(ContextNavigator.class) {
public ContextNavigator create() {
- final ActionToolbarPanel contextNavigatorToolbar = new ActionToolbarPanel(ActionToolbarPanel.Position.context,
- $(Session.class), $$(ActionManager.class), ws);
- final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class),
- contextNavigatorToolbar, $(ContextActionRegistry.class));
+ final ActionToolbarPanel contextNavigatorToolbar = new ActionToolbarPanel(
+ ActionToolbarPanel.Position.context, $(Session.class), $$(ActionManager.class), ws);
+ final ActionToolbar toolbar = new ActionToolbarPresenter($(Session.class), contextNavigatorToolbar,
+ $(ContextActionRegistry.class));
final ContextNavigatorPresenter presenter = new ContextNavigatorPresenter($(StateManager.class),
$(Session.class), $$(ContentServiceAsync.class), i18n, $(EntityTitle.class),
@@ -636,58 +629,59 @@
}
});
- register(SingletonScope.class, new Factory<FileUploader>(FileUploader.class) {
+ register(Singleton.class, new Factory<FileUploader>(FileUploader.class) {
public FileUploader create() {
final FileUploaderDialog panel = new FileUploaderDialog(i18n, ws, $(Session.class));
return panel;
}
});
- install(ProviderRegisterStrategy.registerOnlyIfNotRegistered, new EmiteUIModule(), new DocumentClientModule(),
- new ChatClientModule());
-
- $(SitePublicSpaceLink.class);
- $(SiteMessage.class);
- $(SiteUserMenu.class);
- $(SiteSignInLink.class);
- $(SiteSignOutLink.class);
- $(SiteNewGroupLink.class);
- $(SiteOptions.class);
- $(SiteSearch.class);
- $(SiteLogo.class);
-
- $(GroupMembersSummary.class);
- $(ParticipationSummary.class);
- $(TagsSummary.class);
- $(GroupSummary.class);
-
- $(EntityLogo.class);
- $(EntityTitle.class);
- $(EntitySubTitle.class);
- $(WsThemePresenter.class);
- $(EntityLicensePresenter.class);
- $(RateIt.class);
- $(RatePresenter.class);
-
// Register of tokens like "signin", "newgroup", "translate" etcetera
- $(StateManager.class).addSiteToken(SiteToken.signin.toString(), new Slot<StateToken>() {
+ $(StateManager.class).addSiteToken(SiteToken.signin.toString(), new Listener<StateToken>() {
public void onEvent(final StateToken previousStateToken) {
$(SignIn.class).doSignIn(previousStateToken);
}
});
- $(StateManager.class).addSiteToken(SiteToken.newgroup.toString(), new Slot<StateToken>() {
+ $(StateManager.class).addSiteToken(SiteToken.newgroup.toString(), new Listener<StateToken>() {
public void onEvent(final StateToken previousStateToken) {
$(NewGroup.class).doNewGroup(previousStateToken);
}
});
- $(StateManager.class).addSiteToken(SiteToken.translate.toString(), new Slot<StateToken>() {
+ $(StateManager.class).addSiteToken(SiteToken.translate.toString(), new Listener<StateToken>() {
public void onEvent(final StateToken previousStateToken) {
$(I18nTranslator.class).doShowTranslator();
}
});
+ // $(SiteProgress.class);
+ // $(Site.class);
+ // $(SitePublicSpaceLink.class);
+ // $(SiteMessage.class);
+ // $(SiteUserMenu.class);
+ // $(SiteSignInLink.class);
+ // $(SiteSignOutLink.class);
+ // $(SiteNewGroupLink.class);
+ // $(SiteOptions.class);
+ // $(SiteSearch.class);
+ // $(SiteLogo.class);
+ //
+ // $(GroupMembersSummary.class);
+ // $(ParticipationSummary.class);
+ // $(TagsSummary.class);
+ // $(GroupSummary.class);
+ //
+ // $(EntityLogo.class);
+ // $(EntityTitle.class);
+ // $(EntitySubTitle.class);
+ // $(WsThemePresenter.class);
+ // $(EntityLicensePresenter.class);
+ // $(RateIt.class);
+ // $(RatePresenter.class);
+
+ $(ApplicationComponentGroup.class).createAll();
+ $(ToolGroup.class).createAll();
$(Application.class).start();
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/Session.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -31,8 +31,8 @@
import org.ourproject.kune.platf.client.dto.UserInfoDTO;
import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
public interface Session {
@@ -77,11 +77,11 @@
String getUserHash();
- void onInitDataReceived(Slot<InitDataDTO> slot);
+ void onInitDataReceived(Listener<InitDataDTO> listener);
- void onUserSignIn(Slot<UserInfoDTO> slot);
+ void onUserSignIn(Listener<UserInfoDTO> listener);
- void onUserSignOut(Slot0 slot);
+ void onUserSignOut(Listener0 listener);
void setCurrentUserInfo(UserInfoDTO currentUserInfo);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/SessionDefault.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -35,11 +35,11 @@
import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Signal;
-import com.calclab.suco.client.signal.Signal0;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Event;
+import com.calclab.suco.client.listener.Event0;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
public class SessionDefault implements Session {
private String userHash;
@@ -50,18 +50,18 @@
private Object[][] timezonesArray;
private StateDTO currentState;
private I18nLanguageDTO currentLanguage;
- private final Signal<InitDataDTO> onInitDataReceived;
- private final Signal<UserInfoDTO> onUserSignIn;
- private final Signal0 onUserSignOut;
+ private final Event<InitDataDTO> onInitDataReceived;
+ private final Event<UserInfoDTO> onUserSignIn;
+ private final Event0 onUserSignOut;
private final Provider<UserServiceAsync> userServiceProvider;
public SessionDefault(final String userHash, final Provider<UserServiceAsync> userServiceProvider) {
this.userHash = userHash == null || userHash.equals("null") ? null : userHash;
this.userServiceProvider = userServiceProvider;
languagesArray = null;
- this.onInitDataReceived = new Signal<InitDataDTO>("initDataReceived");
- this.onUserSignIn = new Signal<UserInfoDTO>("onUserSignIn");
- this.onUserSignOut = new Signal0("onUserSignOut");
+ this.onInitDataReceived = new Event<InitDataDTO>("initDataReceived");
+ this.onUserSignIn = new Event<UserInfoDTO>("onUserSignIn");
+ this.onUserSignOut = new Event0("onUserSignOut");
}
public void check(final AsyncCallbackSimple<?> callback) {
@@ -130,16 +130,16 @@
return userHash != null;
}
- public void onInitDataReceived(final Slot<InitDataDTO> slot) {
- onInitDataReceived.add(slot);
+ public void onInitDataReceived(final Listener<InitDataDTO> listener) {
+ onInitDataReceived.add(listener);
}
- public void onUserSignIn(final Slot<UserInfoDTO> slot) {
- onUserSignIn.add(slot);
+ public void onUserSignIn(final Listener<UserInfoDTO> listener) {
+ onUserSignIn.add(listener);
}
- public void onUserSignOut(final Slot0 slot) {
- onUserSignOut.add(slot);
+ public void onUserSignOut(final Listener0 listener) {
+ onUserSignOut.add(listener);
}
public void setCurrent(final StateDTO currentState) {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManager.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -24,13 +24,13 @@
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
import com.google.gwt.user.client.HistoryListener;
public interface StateManager extends HistoryListener {
- void addSiteToken(String token, Slot<StateToken> whenToken);
+ void addSiteToken(String token, Listener<StateToken> whenToken);
void gotoContainer(Long containerId);
@@ -38,13 +38,13 @@
void gotoToken(String token);
- void onGroupChanged(Slot2<String, String> slot);
+ void onGroupChanged(Listener2<String, String> listener);
- void onSocialNetworkChanged(Slot<StateDTO> slot);
+ void onSocialNetworkChanged(Listener<StateDTO> listener);
- void onStateChanged(Slot<StateDTO> slot);
+ void onStateChanged(Listener<StateDTO> listener);
- void onToolChanged(Slot2<String, String> slot);
+ void onToolChanged(Listener2<String, String> listener);
void reload();
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/state/StateManagerDefault.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -33,22 +33,22 @@
import org.ourproject.kune.workspace.client.site.Site;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.signal.Signal;
-import com.calclab.suco.client.signal.Signal2;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Event;
+import com.calclab.suco.client.listener.Event2;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
+import com.calclab.suco.client.listener.Listener2;
public class StateManagerDefault implements StateManager {
private final ContentProvider contentProvider;
private StateDTO oldState;
private final Session session;
private final HistoryWrapper history;
- private final HashMap<String, Slot<StateToken>> siteTokens;
- private final Signal<StateDTO> onStateChanged;
- private final Signal<StateDTO> onSocialNetworkChanged;
- private final Signal2<String, String> onToolChanged;
- private final Signal2<String, String> onGroupChanged;
+ private final HashMap<String, Listener<StateToken>> siteTokens;
+ private final Event<StateDTO> onStateChanged;
+ private final Event<StateDTO> onSocialNetworkChanged;
+ private final Event2<String, String> onToolChanged;
+ private final Event2<String, String> onGroupChanged;
public StateManagerDefault(final ContentProvider contentProvider, final Session session,
final HistoryWrapper history) {
@@ -56,25 +56,25 @@
this.session = session;
this.history = history;
this.oldState = null;
- this.onStateChanged = new Signal<StateDTO>("onStateChanged");
- this.onGroupChanged = new Signal2<String, String>("onGroupChanged");
- this.onToolChanged = new Signal2<String, String>("onToolChanged");
- this.onSocialNetworkChanged = new Signal<StateDTO>("onSocialNetworkChanged");
- session.onUserSignIn(new Slot<UserInfoDTO>() {
+ this.onStateChanged = new Event<StateDTO>("onStateChanged");
+ this.onGroupChanged = new Event2<String, String>("onGroupChanged");
+ this.onToolChanged = new Event2<String, String>("onToolChanged");
+ this.onSocialNetworkChanged = new Event<StateDTO>("onSocialNetworkChanged");
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
public void onEvent(final UserInfoDTO parameter) {
restorePreviousState();
}
});
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
reload();
}
});
- siteTokens = new HashMap<String, Slot<StateToken>>();
+ siteTokens = new HashMap<String, Listener<StateToken>>();
}
- public void addSiteToken(final String token, final Slot<StateToken> slot) {
- siteTokens.put(token, slot);
+ public void addSiteToken(final String token, final Listener<StateToken> listener) {
+ siteTokens.put(token, listener);
}
public void gotoContainer(final Long containerId) {
@@ -92,14 +92,14 @@
gotoToken(new StateToken(token));
}
- public void onGroupChanged(final Slot2<String, String> slot) {
- onGroupChanged.add(slot);
+ public void onGroupChanged(final Listener2<String, String> listener) {
+ onGroupChanged.add(listener);
}
public void onHistoryChanged(final String historyToken) {
- final Slot<StateToken> tokenSlot = siteTokens.get(historyToken);
+ final Listener<StateToken> tokenListener = siteTokens.get(historyToken);
Log.debug("history token: " + historyToken);
- if (tokenSlot == null) {
+ if (tokenListener == null) {
onHistoryChanged(new StateToken(historyToken));
} else {
StateToken stateToken;
@@ -110,20 +110,20 @@
} else {
stateToken = oldState.getStateToken();
}
- tokenSlot.onEvent(stateToken);
+ tokenListener.onEvent(stateToken);
}
}
- public void onSocialNetworkChanged(final Slot<StateDTO> slot) {
- onSocialNetworkChanged.add(slot);
+ public void onSocialNetworkChanged(final Listener<StateDTO> listener) {
+ onSocialNetworkChanged.add(listener);
}
- public void onStateChanged(final Slot<StateDTO> slot) {
- onStateChanged.add(slot);
+ public void onStateChanged(final Listener<StateDTO> listener) {
+ onStateChanged.add(listener);
}
- public void onToolChanged(final Slot2<String, String> slot) {
- onToolChanged.add(slot);
+ public void onToolChanged(final Listener2<String, String> listener) {
+ onToolChanged.add(listener);
}
/**
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorItemPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorItemPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorItemPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -5,7 +5,7 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener2;
public class ToolSelectorItemPresenter implements ToolSelectorItem {
@@ -34,7 +34,7 @@
public void init(final ToolSelectorItemView view) {
this.view = view;
toolSelector.addTool(this);
- wsThemePresenter.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ wsThemePresenter.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
setTheme(oldTheme, newTheme);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/tool/ToolSelectorPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -5,7 +5,7 @@
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener2;
public class ToolSelectorPresenter implements ToolSelector {
@@ -13,12 +13,12 @@
public ToolSelectorPresenter(final StateManager stateManager, final WsThemePresenter wsThemePresenter) {
tools = new HashMap<String, ToolSelectorItem>();
- stateManager.onGroupChanged(new Slot2<String, String>() {
+ stateManager.onGroupChanged(new Listener2<String, String>() {
public void onEvent(final String oldGroupName, final String newGroupName) {
onGroupChanged(newGroupName);
}
});
- stateManager.onToolChanged(new Slot2<String, String>() {
+ stateManager.onToolChanged(new Listener2<String, String>() {
public void onEvent(final String oldTool, final String newTool) {
onToolChanged(oldTool, newTool);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/MenuItem.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/MenuItem.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/MenuItem.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,19 +1,19 @@
package org.ourproject.kune.platf.client.ui;
-import com.calclab.suco.client.signal.Signal;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Event;
+import com.calclab.suco.client.listener.Listener;
public class MenuItem<T> {
final String icon;
final String title;
- private final Signal<T> onClick;
+ private final Event<T> onClick;
- public MenuItem(final String icon, final String title, final Slot<T> slot) {
+ public MenuItem(final String icon, final String title, final Listener<T> listener) {
this.icon = icon;
this.title = title;
- this.onClick = new Signal<T>("onClick");
- onClick(slot);
+ this.onClick = new Event<T>("onClick");
+ onClick(listener);
}
public void fire(final T id) {
@@ -28,7 +28,7 @@
return title;
}
- public void onClick(final Slot<T> slot) {
- onClick.add(slot);
+ public void onClick(final Listener<T> listener) {
+ onClick.add(listener);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploader.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -2,6 +2,10 @@
public interface FileUploader {
+ public static final String USERHASH = "userhash";
+ public static final String CURRENT_STATE_TOKEN = "currentStateToken";
+ public static final String FILENAME = "filename";
+
void hide();
void setPermittedExtensions(String extensions);
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/dialogs/FileUploaderDialog.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -20,8 +20,10 @@
public class FileUploaderDialog implements FileUploader {
- private static final String URL = "/kune/servlets/FileUploadManagerRevisited";
+ protected static final String SITE_FILE_UPLOADER = "k-site-file-uploader";
+ private static final String URL = "/kune/servlets/FileUploadManager";
+
private UploadDialog dialog;
private ToolbarButton traybarButton;
private final I18nUITranslationService i18n;
@@ -42,6 +44,7 @@
public void setPermittedExtensions(final String extensions) {
DeferredCommand.addCommand(new Command() {
public void execute() {
+ Log.error("Debugging setPerm issue, current perms: " + dialog.getPermittedExtensions());
final Object[] objs = KuneStringUtils.splitTags(extensions).toArray();
final String[] exts = new String[objs.length];
for (int i = 0; i < objs.length; i++) {
@@ -78,10 +81,9 @@
private void createDialog(final boolean show) {
DeferredCommand.addCommand(new Command() {
-
public void execute() {
-
dialog = new UploadDialog(i18n.t("File uploader"), false, true);
+ dialog.setId(SITE_FILE_UPLOADER);
// dialog.setUploadAutostart(true);
dialog.setResetOnHide(false);
dialog.addListener(new UploadDialogListenerAdapter() {
@@ -115,9 +117,9 @@
final String filename) {
Log.info("Setting upload params");
final UrlParam param[] = new UrlParam[3];
- param[0] = new UrlParam("userhash", userhash);
- param[1] = new UrlParam("currentStateToken", currentStateToken);
- param[2] = new UrlParam("filename", filename);
+ param[0] = new UrlParam(USERHASH, userhash);
+ param[1] = new UrlParam(CURRENT_STATE_TOKEN, currentStateToken);
+ param[2] = new UrlParam(FILENAME, filename);
dialog.setBaseParams(param);
dialog.setPostVarName(filename);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridButton.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridButton.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridButton.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,27 +1,27 @@
package org.ourproject.kune.platf.client.ui.gridmenu;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class GridButton {
private final String title;
private final String icon;
private final String tooltip;
- private final Slot<String> slot;
+ private final Listener<String> listener;
- public GridButton(final String icon, final String title, final String tooltip, final Slot<String> slot) {
+ public GridButton(final String icon, final String title, final String tooltip, final Listener<String> listener) {
this.icon = icon;
this.title = title;
this.tooltip = tooltip;
- this.slot = slot;
+ this.listener = listener;
}
public String getIcon() {
return icon;
}
- public Slot<String> getSlot() {
- return slot;
+ public Listener<String> getListener() {
+ return listener;
}
public String getTitle() {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridDropConfiguration.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridDropConfiguration.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridDropConfiguration.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -21,18 +21,18 @@
*/
package org.ourproject.kune.platf.client.ui.gridmenu;
-import com.calclab.suco.client.signal.Signal;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Event;
+import com.calclab.suco.client.listener.Listener;
public class GridDropConfiguration {
private final String ddGroupId;
- private final Signal<String> onDrop;
+ private final Event<String> onDrop;
- public GridDropConfiguration(final String ddGroupId, final Slot<String> slot) {
+ public GridDropConfiguration(final String ddGroupId, final Listener<String> listener) {
this.ddGroupId = ddGroupId;
- this.onDrop = new Signal<String>("onDrop");
- this.onDrop(slot);
+ this.onDrop = new Event<String>("onDrop");
+ this.onDrop(listener);
}
public void fire(final String id) {
@@ -43,8 +43,8 @@
return ddGroupId;
}
- public void onDrop(final Slot<String> slot) {
- onDrop.add(slot);
+ public void onDrop(final Listener<String> listener) {
+ onDrop.add(listener);
}
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridMenuPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridMenuPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/gridmenu/GridMenuPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -4,8 +4,8 @@
import java.util.HashMap;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.signal.Signal;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Event;
+import com.calclab.suco.client.listener.Listener;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.SortDir;
@@ -60,8 +60,8 @@
private GridPanel grid;
private final boolean grouped;
private final boolean withCounters;
- private final Signal<String> onClick;
- private final Signal<String> onDoubleClick;
+ private final Event<String> onClick;
+ private final Event<String> onDoubleClick;
private Toolbar topBar;
private Toolbar bottomBar;
private ColumnModel columnModel;
@@ -92,8 +92,8 @@
public GridMenuPanel(final String emptyText, final GridDragConfiguration gridDragConfiguration,
final GridDropConfiguration gridDropConfiguration, final boolean grouped, final boolean withCounters,
final boolean withTopBar, final boolean withBottomBar, final boolean withEndIcon) {
- this.onClick = new Signal<String>("onClick");
- this.onDoubleClick = new Signal<String>("onDoubleClick");
+ this.onClick = new Event<String>("onClick");
+ this.onDoubleClick = new Event<String>("onDoubleClick");
this.grouped = grouped;
this.withCounters = withCounters;
this.withEndIcon = withEndIcon;
@@ -196,12 +196,12 @@
return topBar;
}
- public void onClick(final Slot<String> slot) {
- onClick.add(slot);
+ public void onClick(final Listener<String> listener) {
+ onClick.add(listener);
}
- public void onDoubleClick(final Slot<String> slot) {
- onDoubleClick.add(slot);
+ public void onDoubleClick(final Listener<String> listener) {
+ onDoubleClick.add(listener);
}
public void removeAll() {
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RateItPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -27,8 +27,8 @@
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
public class RateItPresenter implements RateIt {
@@ -47,7 +47,7 @@
this.session = session;
this.contentServiceProvider = contentServiceProvider;
this.stateManager = stateManager;
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RatePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RatePresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/client/ui/rate/RatePresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -3,14 +3,14 @@
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.state.StateManager;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class RatePresenter {
private RateView view;
public RatePresenter(final StateManager stateManager) {
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/PlatformServerModule.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -64,7 +64,7 @@
import org.ourproject.kune.platf.server.manager.ToolConfigurationManager;
import org.ourproject.kune.platf.server.manager.UserManager;
import org.ourproject.kune.platf.server.manager.impl.FileManagerDefault;
-import org.ourproject.kune.platf.server.manager.impl.FileUploadManagerRevisited;
+import org.ourproject.kune.platf.server.manager.impl.FileUploadManager;
import org.ourproject.kune.platf.server.manager.impl.GroupManagerDefault;
import org.ourproject.kune.platf.server.manager.impl.I18nCountryManagerDefault;
import org.ourproject.kune.platf.server.manager.impl.I18nLanguageManagerDefault;
@@ -108,7 +108,7 @@
bind(KuneProperties.class).to(KunePropertiesDefault.class);
bind(Mapper.class).to(DozerMapper.class);
bind(ToolRegistry.class);
- bind(FileUploadManagerRevisited.class);
+ bind(FileUploadManager.class);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(Authenticated.class),
outermostCall(new AuthenticatedMethodInterceptor()));
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/domain/ChatUserParams.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/domain/ChatUserParams.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/domain/ChatUserParams.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -2,8 +2,7 @@
import java.io.Serializable;
-import com.calclab.emite.client.im.roster.RosterManager;
-import com.calclab.emite.client.im.roster.RosterManager.SubscriptionMode;
+import com.calclab.emiteuimodule.client.SubscriptionMode;
public class ChatUserParams implements Serializable {
@@ -37,7 +36,7 @@
return chatColor;
}
- public RosterManager.SubscriptionMode getSubscriptionMode() {
+ public SubscriptionMode getSubscriptionMode() {
return subscriptionMode;
}
@@ -57,7 +56,7 @@
this.publishRoster = publishRoster;
}
- public void setSubscriptionMode(final RosterManager.SubscriptionMode subscriptionMode) {
+ public void setSubscriptionMode(final SubscriptionMode subscriptionMode) {
this.subscriptionMode = subscriptionMode;
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/FileManager.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,5 +1,35 @@
package org.ourproject.kune.platf.server.manager;
+import java.io.File;
+import java.io.IOException;
+
public interface FileManager {
+ /**
+ * Create a new file adding a numeric sequence if the file already exists
+ *
+ * @param dir
+ * the directory (use File.separator for dir delimiters)
+ * @param fileName
+ * (the new file name)
+ * @return if 'file.txt' exists it creates 'file 1.txt' and if 'file 1.txt'
+ * exists it creates 'file 2.txt' and so on
+ * @throws IOException
+ */
+ File createFileWithSequentialName(String dir, String fileName) throws IOException;
+
+ /**
+ * @param dir
+ * the directory (use File.separator for dir delimiters)
+ * @return true if and only if the directory was created, along with all
+ * necessary parent directories; false otherwise
+ */
+ boolean mkdir(String dir);
+
+ /**
+ * @param dir
+ * the directory (use File.separator for dir delimiters)
+ */
+ void rmdir(String dir);
+
}
Modified: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileManagerDefault.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,5 +1,8 @@
package org.ourproject.kune.platf.server.manager.impl;
+import java.io.File;
+import java.io.IOException;
+
import org.ourproject.kune.platf.server.manager.FileManager;
import com.google.inject.Singleton;
@@ -7,4 +10,29 @@
@Singleton
public class FileManagerDefault implements FileManager {
+ public File createFileWithSequentialName(final String dir, final String fileName) throws IOException {
+ String fileNameProposal = new String(fileName);
+ File file = new File(dir, fileNameProposal);
+ while (file.exists()) {
+ fileNameProposal = FileUtils.getNextSequentialFileName(fileNameProposal, true);
+ file = new File(dir, fileNameProposal);
+ }
+ file.createNewFile();
+ return file;
+ }
+
+ public boolean mkdir(final String dir) {
+ return (new File(dir)).mkdirs();
+ }
+
+ public void rmdir(final String dir) {
+ final File file = new File(dir);
+ if (!file.isDirectory()) {
+ throw new RuntimeException("rmdir: " + dir + ": Not a directory");
+ }
+ if (file.listFiles().length != 0) {
+ throw new RuntimeException("rmdir: " + dir + ": Directory not empty");
+ }
+ file.delete();
+ }
}
Copied: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java (from rev 878, trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java)
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java 2008-09-22 11:53:01 UTC (rev 878)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManager.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,154 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import net.sf.json.JSONObject;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
+import org.ourproject.kune.platf.server.access.AccessRol;
+import org.ourproject.kune.platf.server.auth.ActionLevel;
+import org.ourproject.kune.platf.server.auth.Authenticated;
+import org.ourproject.kune.platf.server.auth.Authorizated;
+import org.ourproject.kune.platf.server.content.ContentManager;
+import org.ourproject.kune.platf.server.manager.FileManager;
+import org.ourproject.kune.platf.server.properties.KuneProperties;
+
+import com.google.inject.Inject;
+import com.google.inject.servlet.RequestScoped;
+
+@RequestScoped
+public class FileUploadManager extends HttpServlet {
+
+ public static final Log log = LogFactory.getLog(FileUploadManager.class);
+
+ private static final long serialVersionUID = 1L;
+
+ @Inject
+ KuneProperties kuneProperties;
+ @Inject
+ ContentManager contentManager;
+ @Inject
+ FileManager fileManager;
+
+ @Override
+ @SuppressWarnings( { "unchecked", "deprecation" })
+ protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException,
+ IOException {
+
+ // i18n
+ JSONObject jsonResponse = createJsonResponse(true, "OK");
+
+ final DiskFileItemFactory factory = new DiskFileItemFactory();
+ // maximum size that will be stored in memory
+ factory.setSizeThreshold(4096);
+ // the location for saving data that is larger than getSizeThreshold()
+ factory.setRepository(new File("/tmp"));
+
+ if (!ServletFileUpload.isMultipartContent(req)) {
+ log.warn("Not a multipart upload");
+ }
+
+ final ServletFileUpload upload = new ServletFileUpload(factory);
+ // maximum size before a FileUploadException will be thrown
+ upload.setSizeMax(new Integer(kuneProperties.get(KuneProperties.UPLOAD_MAX_FILE_SIZE)) * 1024 * 1024);
+
+ try {
+ final List fileItems = upload.parseRequest(req);
+ String userHash = null;
+ StateToken stateToken = null;
+ String fileName = null;
+ FileItem file = null;
+ for (final Iterator iterator = fileItems.iterator(); iterator.hasNext();) {
+ final FileItem item = (FileItem) iterator.next();
+ if (item.isFormField()) {
+ final String name = item.getFieldName();
+ final String value = item.getString();
+ log.info("name: " + name + " value: " + value);
+ if (name.equals(FileUploader.USERHASH)) {
+ userHash = value;
+ }
+ if (name.equals(FileUploader.CURRENT_STATE_TOKEN)) {
+ stateToken = new StateToken(value);
+ }
+ } else {
+ fileName = item.getName();
+ log.info("file: " + fileName + " fieldName: " + item.getFieldName() + " size: " + item.getSize());
+ file = item;
+ }
+ }
+ createFile(userHash, stateToken, fileName, file);
+ } catch (final FileUploadException e) {
+ // i18n
+ jsonResponse = createJsonResponse(false, "Error: File too large");
+ } catch (final Exception e) {
+ // i18n
+ jsonResponse = createJsonResponse(false, "Error uploading file");
+ e.printStackTrace();
+ }
+
+ final Writer w = new OutputStreamWriter(resp.getOutputStream());
+ w.write(jsonResponse.toString());
+ w.close();
+ resp.setStatus(HttpServletResponse.SC_OK);
+ }
+
+ private String calculateUploadDirLocation(final StateToken stateToken) {
+ return kuneProperties.get(KuneProperties.UPLOAD_LOCATION) + File.pathSeparator + stateToken.getGroup()
+ + File.pathSeparator + stateToken.getTool() + File.pathSeparator + stateToken.getFolder();
+ }
+
+ @Authenticated
+ @Authorizated(accessRolRequired = AccessRol.Editor, actionLevel = ActionLevel.container)
+ private JSONObject createFile(final String userHash, final StateToken stateToken, final String fileName,
+ final FileItem fileUploadItem) throws Exception {
+ final String destDir = calculateUploadDirLocation(stateToken);
+ fileManager.mkdir(destDir);
+ final File file = fileManager.createFileWithSequentialName(destDir, fileName);
+ fileUploadItem.write(file);
+ fileUploadItem.getContentType();
+ // here ContentManager code
+ return createJsonResponse(true, "OK");
+ }
+
+ private JSONObject createJsonResponse(final boolean success, final String message) {
+ /**
+ *
+ * http://max-bazhenov.com/dev/upload-dialog-2.0/index.php
+ *
+ * Server side handler.
+ *
+ * The files in the queue are posted one at a time, the file field name
+ * is 'file'. The handler should return json encoded object with
+ * following properties: { success: true|false, // required error:
+ * 'Error or success message' // optional, also can be named 'message' }
+ */
+
+ JSONObject response = null;
+ try {
+ response = new JSONObject();
+ response.put("success", success);
+ response.put("error", message);
+ response.put("code", "232");
+ } catch (final Exception e) {
+ log.error("Error building response");
+ }
+ return response;
+ }
+}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerDefault.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerDefault.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerDefault.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,46 +0,0 @@
-package org.ourproject.kune.platf.server.manager.impl;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.cafesip.gwtcomp.server.FileUploadAction;
-import org.cafesip.gwtcomp.server.FormResponse;
-
-public class FileUploadManagerDefault implements FileUploadAction {
-
- public static final Log log = LogFactory.getLog(FileUploadManagerDefault.class);
- private HashMap<String, File> files;
-
- @SuppressWarnings("unchecked")
- public FormResponse onSubmit(final HttpServlet servlet, final HttpServletRequest request) {
- for (final Map.Entry<String, File> entry : files.entrySet()) {
- log.info("file uploaded: " + entry.getKey());
- }
-
- /**
- *
- * http://max-bazhenov.com/dev/upload-dialog-2.0/index.php
- *
- * Server side handler.
- *
- * The files in the queue are posted one at a time, the file field name
- * is 'file'. The handler should return json encoded object with
- * following properties: { success: true|false, // required error:
- * 'Error or success message' // optional, also can be named 'message' }
- */
- return new FormResponse(HttpServletResponse.SC_OK, "{'success':true,'message':'OK'}", false);
- }
-
- public void setFileList(final HashMap<String, File> files) {
- log.info("Setting files");
- this.files = files;
- }
-
-}
Deleted: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUploadManagerRevisited.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -1,111 +0,0 @@
-package org.ourproject.kune.platf.server.manager.impl;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import net.sf.json.JSONObject;
-
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadException;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.ourproject.kune.platf.server.properties.KuneProperties;
-
-import com.google.inject.Inject;
-import com.google.inject.servlet.RequestScoped;
-
-@RequestScoped
-public class FileUploadManagerRevisited extends HttpServlet {
-
- public static final Log log = LogFactory.getLog(FileUploadManagerRevisited.class);
-
- private static final long serialVersionUID = 1L;
-
- @Inject
- KuneProperties kuneProperties;
-
- @Override
- @SuppressWarnings( { "unchecked", "deprecation" })
- protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException,
- IOException {
-
- // i18n
- String jsonResponse = createJsonResponse(true, "OK");
-
- final DiskFileItemFactory factory = new DiskFileItemFactory();
- // maximum size that will be stored in memory
- factory.setSizeThreshold(4096);
- // the location for saving data that is larger than getSizeThreshold()
- factory.setRepository(new File("/tmp"));
-
- if (!ServletFileUpload.isMultipartContent(req)) {
- log.warn("Not a multipart upload");
- }
-
- final ServletFileUpload upload = new ServletFileUpload(factory);
- // maximum size before a FileUploadException will be thrown
- upload.setSizeMax(new Integer(kuneProperties.get(KuneProperties.UPLOAD_MAX_FILE_SIZE)) * 1024 * 1024);
-
- try {
- final List fileItems = upload.parseRequest(req);
- for (final Iterator iterator = fileItems.iterator(); iterator.hasNext();) {
- final FileItem item = (FileItem) iterator.next();
- if (item.isFormField()) {
- final String name = item.getFieldName();
- final String value = item.getString();
- log.info("name: " + name + " value: " + value);
- } else {
- final String fileName = item.getName();
- log.info("file: " + fileName + " fieldName: " + item.getFieldName() + " size: " + item.getSize());
- item.write(new File(kuneProperties.get(KuneProperties.UPLOAD_LOCATION), fileName));
- }
- }
- } catch (final FileUploadException e) {
- jsonResponse = createJsonResponse(false, "Error: File too large");
- } catch (final Exception e) {
- jsonResponse = createJsonResponse(false, "Error uploading file");
- e.printStackTrace();
- }
-
- final Writer w = new OutputStreamWriter(resp.getOutputStream());
- w.write(jsonResponse);
- w.close();
- resp.setStatus(HttpServletResponse.SC_OK);
- }
-
- private String createJsonResponse(final boolean success, final String message) {
- /**
- *
- * http://max-bazhenov.com/dev/upload-dialog-2.0/index.php
- *
- * Server side handler.
- *
- * The files in the queue are posted one at a time, the file field name
- * is 'file'. The handler should return json encoded object with
- * following properties: { success: true|false, // required error:
- * 'Error or success message' // optional, also can be named 'message' }
- */
-
- JSONObject response = null;
- try {
- response = new JSONObject();
- response.put("success", success);
- response.put("error", message);
- response.put("code", "232");
- } catch (final Exception e) {
- log.error("Error building response");
- }
- return response.toString();
- }
-}
Added: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/FileUtils.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,30 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+public class FileUtils {
+
+ public static String getNextSequentialFileName(final String fileName) {
+ final int lastSpace = fileName.lastIndexOf(" ");
+ if (lastSpace != -1) {
+ final String suffix = fileName.substring(lastSpace + 1);
+ try {
+ final Integer i = new Integer(suffix);
+ return fileName.substring(0, lastSpace + 1) + (i + 1);
+ } catch (final NumberFormatException e) {
+ }
+ }
+ return fileName + " 1";
+ }
+
+ public static String getNextSequentialFileName(final String fileName, boolean preserveExtension) {
+ if (!preserveExtension) {
+ return getNextSequentialFileName(fileName);
+ }
+ final int dotIndex = fileName.lastIndexOf(".");
+ if (dotIndex == -1 || dotIndex == 0) {
+ return getNextSequentialFileName(fileName);
+ } else {
+ final String ext = fileName.substring(dotIndex);
+ return getNextSequentialFileName(fileName.substring(0, dotIndex)) + ext;
+ }
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -101,6 +101,7 @@
if (!item.getStateToken().hasAll()) {
// is a container
child.setExpandable(true);
+ child.setSingleClickExpand(true);
child.addListener(new TreeNodeListenerAdapter() {
public void onExpand(final Node node) {
treePanel.getNodeById(node.getId()).select();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/ctxnav/ContextNavigatorPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -44,9 +44,9 @@
import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.title.EntityTitle;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class ContextNavigatorPresenter implements ContextNavigator {
@@ -100,12 +100,12 @@
public void init(final ContextNavigatorView view) {
this.view = view;
- session.onUserSignIn(new Slot<UserInfoDTO>() {
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
public void onEvent(final UserInfoDTO parameter) {
clear();
}
});
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
clear();
}
@@ -152,7 +152,7 @@
public void selectItem(final StateToken stateToken) {
view.selectItem(genId(stateToken));
toolbar.disableMenusAndClearButtons();
- toolbar.setActions(actionsByItem.get(stateToken), true);
+ toolbar.showActions(actionsByItem.get(stateToken), true);
}
public void setEditOnNextStateChange(final boolean edit) {
@@ -184,7 +184,7 @@
.getTypeId());
view.setRootItem(genId(root.getStateToken()), i18n.t(root.getName()), root.getStateToken(), set
.getItemActions());
- toolbar.setActions(set.getToolbarActions(), false);
+ toolbar.showActions(set.getToolbarActions(), false);
createChildItems(root, containerRights);
actionsByItem.put(root.getStateToken(), set.getToolbarActions());
}
@@ -229,7 +229,7 @@
final boolean isNodeSelected) {
final ActionCollectionSet<StateToken> set = actionRegistry.selectCurrentActions(rights, contentTypeId);
- toolbar.setActions(set.getToolbarActions(), isNodeSelected);
+ toolbar.showActions(set.getToolbarActions(), isNodeSelected);
final ContextNavigatorItem item = new ContextNavigatorItem(genId(stateToken), genId(parentStateToken),
contentIconsRegistry.getContentTypeIcon(contentTypeId), title, status, stateToken,
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/entitylogo/EntityLogoPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -6,14 +6,14 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
public class EntityLogoPresenter implements EntityLogo {
private EntityLogoView view;
public EntityLogoPresenter(final StateManager stateManager, final WsThemePresenter theme) {
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
final GroupDTO group = state.getGroup();
final boolean isAdmin = state.getGroupRights().isAdministrable();
@@ -22,7 +22,7 @@
view.setPutYourLogoVisible(isAdmin);
}
});
- theme.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ theme.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
view.setTheme(oldTheme, newTheme);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nTranslatorPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nTranslatorPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nTranslatorPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -25,7 +25,7 @@
import org.ourproject.kune.platf.client.state.Session;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class I18nTranslatorPresenter implements I18nTranslator {
@@ -39,7 +39,7 @@
this.session = session;
this.i18nService = i18nService;
this.i18n = i18n;
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
view.hideTranslatorAndIcon();
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nUITranslationService.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nUITranslationService.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/i18n/I18nUITranslationService.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -30,7 +30,7 @@
import org.ourproject.kune.platf.client.ui.WindowUtils;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class I18nUITranslationService extends I18nTranslationService {
@@ -72,7 +72,7 @@
return lexicon;
}
- public void init(final I18nServiceAsync i18nService, final Session session, final Slot0 onReady) {
+ public void init(final I18nServiceAsync i18nService, final Session session, final Listener0 onReady) {
this.i18nService = i18nService;
this.session = session;
final Location loc = WindowUtils.getLocation();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/licensefoot/EntityLicensePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/licensefoot/EntityLicensePresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/licensefoot/EntityLicensePresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -24,7 +24,7 @@
import org.ourproject.kune.platf.client.dto.StateDTO;
import org.ourproject.kune.platf.client.state.StateManager;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class EntityLicensePresenter {
@@ -32,7 +32,7 @@
private LicenseDTO license;
public EntityLicensePresenter(final StateManager stateManager) {
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setLicense(state);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -30,7 +30,7 @@
import org.ourproject.kune.workspace.client.licensechoose.LicenseChoosePanel;
import org.ourproject.kune.workspace.client.site.msg.SiteMessagePanel;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.HTML;
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/newgroup/NewGroupPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -33,8 +33,8 @@
import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.site.SiteToken;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -52,7 +52,7 @@
this.session = session;
this.stateManager = stateManager;
this.groupServiceProvider = groupServiceProvider;
- stateManager.addSiteToken(SiteToken.newgroup.toString(), new Slot<StateToken>() {
+ stateManager.addSiteToken(SiteToken.newgroup.toString(), new Listener<StateToken>() {
public void onEvent(final StateToken previousStateToken) {
doNewGroup(previousStateToken);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcher.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcher.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcher.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -21,11 +21,11 @@
import org.ourproject.kune.platf.client.dto.LinkDTO;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public interface EntityLiveSearcher {
- void onSelection(Slot<LinkDTO> slot);
+ void onSelection(Listener<LinkDTO> listener);
void show();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcherPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcherPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/search/EntityLiveSearcherPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -22,12 +22,12 @@
import org.ourproject.kune.platf.client.View;
import org.ourproject.kune.platf.client.dto.LinkDTO;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class EntityLiveSearcherPresenter implements EntityLiveSearcher {
private EntityLiveSearcherView view;
- private Slot<LinkDTO> slot;
+ private Listener<LinkDTO> listener;
public EntityLiveSearcherPresenter() {
}
@@ -41,12 +41,12 @@
}
public void onSelection(final LinkDTO link) {
- slot.onEvent(link);
+ listener.onEvent(link);
view.hide();
}
- public void onSelection(final Slot<LinkDTO> slot) {
- this.slot = slot;
+ public void onSelection(final Listener<LinkDTO> listener) {
+ this.listener = listener;
}
public void show() {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -54,6 +54,7 @@
public class SiteSearcherPanel extends AbstractSearcherPanel implements SiteSearcherView {
+ private static final String SITE_SEARCHER_DIALOG = "k-site-searcher-dialog";
private final Window dialog;
private final SiteSearcherPresenter presenter;
private Store groupStore;
@@ -159,6 +160,7 @@
centerPanel.setActiveItemID(panelId);
dialog.setCloseAction(Window.HIDE);
+ dialog.ensureDebugId(SITE_SEARCHER_DIALOG);
return dialog;
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/search/SiteSearcherPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -26,7 +26,7 @@
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class SiteSearcherPresenter implements SiteSearcher {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -53,6 +53,7 @@
public class SignInPanel implements SignInView {
private class MessagePanel extends Panel {
+ private static final String SIGNIN_MESSAGE_PANEL = "k-signin-message-panel";
private final SimpleMessagePanel messagesPanel;
public MessagePanel() {
@@ -60,6 +61,7 @@
setBorder(false);
setHeight(60);
messagesPanel = new SimpleMessagePanel();
+ messagesPanel.ensureDebugId(SIGNIN_MESSAGE_PANEL);
messagesPanel.setMessage("", SiteErrorType.info, SiteErrorType.error);
add(messagesPanel);
}
@@ -79,6 +81,9 @@
}
}
+ private static final String USER_SIGN_IN_PANEL = "k-user-sign-in-panel";
+ private static final String USER_REGISTER_PANEL = "k-user-register-panel";
+
private BasicDialog dialog;
private final SignInPresenter presenter;
private SignInForm signInForm;
@@ -270,11 +275,13 @@
confPanel(signInPanel);
signInForm = new SignInForm(i18n);
signInPanel.add(signInForm.getForm());
+ signInPanel.ensureDebugId(USER_SIGN_IN_PANEL);
signInPanel.add(createNoAccountRegister());
messagesSignInPanel = new MessagePanel();
signInPanel.add(messagesSignInPanel);
final Panel registerPanel = new Panel(i18n.t("Register"));
+ registerPanel.ensureDebugId(USER_REGISTER_PANEL);
confPanel(registerPanel);
centerPanel.add(signInPanel);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/signin/SignInPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -36,7 +36,7 @@
import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync;
import com.allen_sauer.gwt.log.client.Log;
-import com.calclab.emite.client.im.roster.RosterManager.SubscriptionMode;
+import com.calclab.emiteuimodule.client.SubscriptionMode;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/site/Site.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/site/Site.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/site/Site.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -25,7 +25,7 @@
import org.ourproject.kune.workspace.client.site.msg.SiteMessage;
import org.ourproject.kune.workspace.client.sitebar.siteprogress.SiteProgress;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class Site {
public static final String USERHASH = "userHash";
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitelogo/SiteLogoPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitelogo/SiteLogoPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitelogo/SiteLogoPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -4,14 +4,14 @@
import org.ourproject.kune.platf.client.dto.InitDataDTO;
import org.ourproject.kune.platf.client.state.Session;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class SiteLogoPresenter implements SiteLogo {
private SiteLogoView view;
public SiteLogoPresenter(final Session session) {
- session.onInitDataReceived(new Slot<InitDataDTO>() {
+ session.onInitDataReceived(new Listener<InitDataDTO>() {
public void onEvent(final InitDataDTO initData) {
view.setSiteLogoUrl(initData.getSiteLogoUrl());
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteoptions/SiteOptionsPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteoptions/SiteOptionsPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteoptions/SiteOptionsPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -4,7 +4,7 @@
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.PushButton;
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteprogress/SiteProgressPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteprogress/SiteProgressPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteprogress/SiteProgressPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -2,7 +2,7 @@
import org.ourproject.kune.workspace.client.sitebar.sitepublic.SitePublicSpaceLink;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.RootPanel;
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -14,6 +14,9 @@
public class SitePublicSpaceLinkPanel implements SitePublicSpaceLinkView {
+ private static final String SITE_GOTO_PUBLIC = "k-site-goto-public";
+ private static final String SITE_CONTENT_NO_PUBLIC = "k-site-content-no-public";
+
private final HorizontalPanel publicHP;
private final IconLabel contentNoPublic;
private final IconLabel gotoPublic;
@@ -23,7 +26,9 @@
final I18nUITranslationService i18n, final Images img) {
publicHP = new HorizontalPanel();
gotoPublic = new IconLabel(img.anybody(), i18n.t("Go to Public Space"), false);
+ gotoPublic.ensureDebugId(SITE_GOTO_PUBLIC);
contentNoPublic = new IconLabel(img.anybody(), i18n.t("This content is not public"));
+ contentNoPublic.ensureDebugId(SITE_CONTENT_NO_PUBLIC);
publicHP.add(gotoPublic);
publicHP.add(contentNoPublic);
final SiteBar siteBar = ws.getSiteBar();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitepublic/SitePublicSpaceLinkPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -6,14 +6,14 @@
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.platf.client.state.StateManager;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class SitePublicSpaceLinkPresenter implements SitePublicSpaceLink {
private SitePublicSpaceLinkView view;
public SitePublicSpaceLinkPresenter(final StateManager stateManager) {
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -16,6 +16,8 @@
public class SiteSearchPanel implements SiteSearchView {
private static final String SEARCH_TEXT_WIDTH_SMALL = "120";
private static final String SEARCH_TEXT_WIDTH_BIG = "180";
+ private static final String SITE_SEARCH_BUTTON = "k-site-search-button";
+ private static final String SITE_SEARCH_TEXTBOX = "k-site-search-textbox";
private final PushButton searchButton;
private final TextBox searchTextBox;
@@ -29,7 +31,9 @@
siteBar.addSpacer();
siteBar.addSpacer();
searchButton = new PushButton(img.kuneSearchIco().createImage(), img.kuneSearchIcoPush().createImage());
+ searchButton.ensureDebugId(SITE_SEARCH_BUTTON);
searchTextBox = new TextBox();
+ searchTextBox.ensureDebugId(SITE_SEARCH_TEXTBOX);
siteBar.add(searchButton);
siteBar.addSpacer();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesearch/SiteSearchPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -3,7 +3,7 @@
import org.ourproject.kune.platf.client.View;
import org.ourproject.kune.workspace.client.search.SiteSearcher;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class SiteSearchPresenter implements SiteSearch {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -7,11 +7,15 @@
import com.google.gwt.user.client.ui.Hyperlink;
public class SiteSignInLinkPanel implements SiteSignInLinkView {
+
+ private static final String SITE_SIGN_IN = "k-site-sign-in";
+
private final Hyperlink signInHyperlink;
public SiteSignInLinkPanel(final SiteSignInLinkPresenter presenter, final I18nUITranslationService i18n,
final WorkspaceSkeleton ws) {
signInHyperlink = new Hyperlink();
+ signInHyperlink.ensureDebugId(SITE_SIGN_IN);
signInHyperlink.setText(i18n.t("Sign in to collaborate"));
signInHyperlink.setTargetHistoryToken(SiteToken.signin.toString());
ws.getSiteBar().add(signInHyperlink);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignInLinkPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -4,20 +4,20 @@
import org.ourproject.kune.platf.client.dto.UserInfoDTO;
import org.ourproject.kune.platf.client.state.Session;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
public class SiteSignInLinkPresenter implements SiteSignInLink {
private SiteSignInLinkView view;
public SiteSignInLinkPresenter(final Session session) {
- session.onUserSignIn(new Slot<UserInfoDTO>() {
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
public void onEvent(final UserInfoDTO user) {
view.setVisible(false);
}
});
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
view.setVisible(true);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -10,6 +10,8 @@
public class SiteSignOutLinkPanel implements SiteSignOutLinkView {
+ private static final String SITE_SIGN_OUT = "k-site-sign-out";
+
private final Label signOutLabel;
public SiteSignOutLinkPanel(final SiteSignOutLinkPresenter presenter, final I18nUITranslationService i18n,
@@ -17,6 +19,7 @@
signOutLabel = new Label();
signOutLabel.setText(i18n.t("Sign out"));
signOutLabel.addStyleName("k-sitebar-labellink");
+ signOutLabel.ensureDebugId(SITE_SIGN_OUT);
ws.getSiteBar().add(signOutLabel);
signOutLabel.addClickListener(new ClickListener() {
public void onClick(final Widget arg0) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/sitesign/SiteSignOutLinkPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -11,9 +11,9 @@
import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.site.rpc.UserServiceAsync;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -28,17 +28,17 @@
final Provider<KuneErrorHandler> kuneErrorHandlerProvider) {
this.session = session;
this.userServiceProvider = userServiceProvider;
- session.onUserSignIn(new Slot<UserInfoDTO>() {
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
public void onEvent(final UserInfoDTO userInfoDTO) {
view.setVisible(true);
}
});
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
view.setVisible(false);
}
});
- kuneErrorHandlerProvider.get().onSessionExpired(new Slot0() {
+ kuneErrorHandlerProvider.get().onSessionExpired(new Listener0() {
public void onEvent() {
clientUIsignOut();
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -17,6 +17,10 @@
public class SiteUserMenuPanel implements SiteUserMenuView {
+ private static final String LOGGED_USER_MENU = "k-logged-user-menu";
+ private static final String USER_PREFERENCES_MENU_ITEM = "k-user-pref-menu-item";
+ private static final String USER_HOME_PAGE_MENU_ITEM = "k-user-home-page-menu-item";
+ private static final String USER_PARTICIPATION_MENU_ITEM = "k-user-participation-menu-item";
private final PushButton loggedUserMenu;
private final Widget separator;
private final Menu userMenu;
@@ -25,6 +29,7 @@
public SiteUserMenuPanel(final SiteUserMenuPresenter presenter, final WorkspaceSkeleton ws,
final I18nUITranslationService i18n) {
loggedUserMenu = new PushButton("");
+ loggedUserMenu.ensureDebugId(LOGGED_USER_MENU);
loggedUserMenu.setStyleName("k-sitebar-labellink");
ws.getSiteBar().add(loggedUserMenu);
separator = ws.getSiteBar().addSeparator();
@@ -36,6 +41,7 @@
});
final Item userHomePage = new Item(i18n.t("Your homepage"));
userHomePage.setIcon("images/group-home.gif");
+ userHomePage.ensureDebugId(USER_HOME_PAGE_MENU_ITEM);
userHomePage.addListener(new BaseItemListenerAdapter() {
@Override
public void onClick(final BaseItem item, final EventObject e) {
@@ -45,6 +51,7 @@
});
userMenu.addItem(userHomePage);
final Item userPreferences = new Item(i18n.t("Your preferences"));
+ userPreferences.ensureDebugId(USER_PREFERENCES_MENU_ITEM);
userPreferences.setIcon("images/kune-preferences.gif");
userPreferences.addListener(new BaseItemListenerAdapter() {
@Override
@@ -55,6 +62,7 @@
});
userMenu.addItem(userPreferences);
userParticipation = new Menu();
+ userParticipation.ensureDebugId(USER_PARTICIPATION_MENU_ITEM);
final MenuItem userParticipationItem = new MenuItem(i18n.t("Your groups"), userParticipation);
userParticipationItem.setIcon("");
userMenu.addItem(userParticipationItem);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/sitebar/siteusermenu/SiteUserMenuPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -8,8 +8,8 @@
import org.ourproject.kune.platf.client.ui.MenuItem;
import org.ourproject.kune.platf.client.ui.MenuItemCollection;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener0;
public class SiteUserMenuPresenter implements SiteUserMenu {
@@ -22,13 +22,13 @@
this.session = session;
this.stateManager = stateManager;
participateInGroups = new MenuItemCollection<GroupDTO>();
- session.onUserSignIn(new Slot<UserInfoDTO>() {
+ session.onUserSignIn(new Listener<UserInfoDTO>() {
public void onEvent(final UserInfoDTO userInfoDTO) {
onUserSignIn(userInfoDTO);
}
});
- session.onUserSignOut(new Slot0() {
+ session.onUserSignOut(new Listener0() {
public void onEvent() {
view.setVisible(false);
view.setLoggedUserName("");
@@ -54,7 +54,7 @@
private void addPartipation(final GroupDTO group) {
participateInGroups.add(new MenuItem<GroupDTO>("images/group-def-icon.gif", group.getShortName(),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO param) {
stateManager.gotoToken(group.getShortName());
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntitySummary.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -10,6 +10,9 @@
import com.gwtext.client.widgets.layout.FitLayout;
public class EntitySummary {
+ private static final String SITE_TRAYBAR = "k-site-traybar";
+ private static final String ENTITY_SUMMARY = "k-entity-summary";
+ private static final String ENTITY_TOOLS = "k-entity-tools";
private final Panel entityTools;
private final Panel entitySummary;
private final DefaultBorderLayout mainPanel;
@@ -19,6 +22,7 @@
public EntitySummary() {
mainPanel = new DefaultBorderLayout();
entityTools = new Panel();
+ entityTools.ensureDebugId(ENTITY_TOOLS);
entityTools.setLayout(new FitLayout());
entityTools.setAutoHeight(true);
vpTools = new VerticalPanel();
@@ -28,8 +32,10 @@
entitySummary.setBorder(false);
entityTools.setAutoScroll(false);
entitySummary.setAutoScroll(true);
- entitySummary.setCls("k-entity-summary");
- trayBar = mainPanel.createBottomBar(entitySummary, "k-site-traybar");
+ entitySummary.setCls(ENTITY_SUMMARY);
+ entitySummary.ensureDebugId(ENTITY_SUMMARY);
+ trayBar = mainPanel.createBottomBar(entitySummary, SITE_TRAYBAR);
+ trayBar.ensureDebugId(SITE_TRAYBAR);
mainPanel.add(entityTools, DefaultBorderLayout.Position.NORTH);
mainPanel.add(entitySummary, DefaultBorderLayout.Position.CENTER);
trayBar.addFill();
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/EntityWorkspace.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -10,6 +10,11 @@
import com.gwtext.client.widgets.layout.AnchorLayoutData;
public class EntityWorkspace extends DefaultBorderLayout {
+ private static final String ENTITY_TITLE = "k-entity-title";
+ private static final String ENTITY_SUBTITLE = "k-entity-subtitle";
+ private static final String ENTITY_BOTTOM = "k-entity-bottom";
+ private static final String ENTITY_CONTENT = "k-entity-content";
+ private static final String ENTITY_CONTEXT = "k-entity-context";
private final Panel content;
private final Panel context;
private final TitleBar title;
@@ -33,12 +38,15 @@
title = new TitleBar();
title.setHeight("" + (DEF_TOOLBAR_HEIGHT - 2));
- title.setStylePrimaryName("k-entity-title");
+ title.setStylePrimaryName(ENTITY_TITLE);
+ title.ensureDebugId(ENTITY_TITLE);
subTitle = new TitleBar();
- subTitle.setStylePrimaryName("k-entity-subtitle");
+ subTitle.setStylePrimaryName(ENTITY_SUBTITLE);
+ subTitle.ensureDebugId(ENTITY_SUBTITLE);
bottom = new TitleBar();
bottom.setHeight("" + (DEF_TOOLBAR_HEIGHT - 2));
- bottom.setStylePrimaryName("k-entity-bottom");
+ bottom.setStylePrimaryName(ENTITY_BOTTOM);
+ bottom.ensureDebugId(ENTITY_BOTTOM);
roundedTitle = new RoundedPanel(title, RoundedPanel.TOPLEFT, 2);
roundedBottom = new RoundedPanel(bottom, RoundedPanel.BOTTOMLEFT, 2);
@@ -53,6 +61,8 @@
contextWrap.setBorder(true);
content = new Panel();
context = new Panel();
+ content.ensureDebugId(ENTITY_CONTENT);
+ context.ensureDebugId(ENTITY_CONTEXT);
content.setBorder(false);
context.setBorder(false);
context.setCollapsible(true);
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/skel/WorkspaceSkeleton.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -3,7 +3,7 @@
import org.ourproject.kune.platf.client.ui.DefaultBorderLayout;
import org.ourproject.kune.workspace.client.themes.WsTheme;
-import com.calclab.suco.client.signal.Slot0;
+import com.calclab.suco.client.listener.Listener0;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.RootPanel;
@@ -41,7 +41,7 @@
entity.addToEntityMainHeader(widget);
}
- public void askConfirmation(final String title, final String message, final Slot0 onConfirmed, final Slot0 onCancel) {
+ public void askConfirmation(final String title, final String message, final Listener0 onConfirmed, final Listener0 onCancel) {
MessageBox.confirm(title, message, new MessageBox.ConfirmCallback() {
public void execute(final String btnID) {
if (btnID.equals("yes")) {
@@ -81,7 +81,7 @@
extRootBody.mask(message, "x-mask-loading");
}
- public void promptMessage(final String title, final String message, final Slot0 onEnter) {
+ public void promptMessage(final String title, final String message, final Listener0 onEnter) {
MessageBox.prompt(title, message, new MessageBox.PromptCallback() {
public void execute(final String btnID, final String text) {
// FIXME: use btnID
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -14,7 +14,7 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import com.calclab.emiteuimodule.client.users.UserGridPanel;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.gwtext.client.core.EventObject;
@@ -47,7 +47,7 @@
+ "<br/>" + i18n.t("Drop into a room to invite the user to join the chat room"));
gridMenuPanel = new GridMenuPanel<GroupDTO>(i18n.t("This is an orphaned project, if you are interested "
+ "please request to join to work on it"), dragConf, true, true, false, true, false);
- gridMenuPanel.onDoubleClick(new Slot<String>() {
+ gridMenuPanel.onDoubleClick(new Listener<String>() {
public void onEvent(final String groupShortName) {
presenter.onDoubleClick(groupShortName);
}
@@ -76,7 +76,7 @@
public void onClick(final Button button, final EventObject e) {
DeferredCommand.addCommand(new Command() {
public void execute() {
- gridButton.getSlot().onEvent("");
+ gridButton.getListener().onEvent("");
}
});
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/GroupMembersSummaryPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -24,9 +24,9 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
public class GroupMembersSummaryPresenter extends SocialNetworkPresenter implements GroupMembersSummary {
@@ -49,14 +49,14 @@
this.stateManager = stateManager;
this.session = session;
this.snServiceProvider = snServiceProvider;
- final Slot<StateDTO> setStateSlot = new Slot<StateDTO>() {
+ final Listener<StateDTO> setStateListener = new Listener<StateDTO>() {
public void onEvent(StateDTO state) {
setState(state);
}
};
- stateManager.onStateChanged(setStateSlot);
- stateManager.onSocialNetworkChanged(setStateSlot);
- wsThemePresenter.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ stateManager.onStateChanged(setStateListener);
+ stateManager.onSocialNetworkChanged(setStateListener);
+ wsThemePresenter.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
view.setTheme(oldTheme, newTheme);
}
@@ -72,9 +72,9 @@
.getImageHtml(ImageDescriptor.alert), true);
// i18n.t("Add member")
addMember = new GridButton("images/add-green.gif", "", i18n
- .t("Add a group or a person as member of this group"), new Slot<String>() {
+ .t("Add a group or a person as member of this group"), new Listener<String>() {
public void onEvent(final String parameter) {
- liveSearcherProvider.get().onSelection(new Slot<LinkDTO>() {
+ liveSearcherProvider.get().onSelection(new Listener<LinkDTO>() {
public void onEvent(final LinkDTO link) {
view.confirmAddCollab(link.getShortName(), link.getLongName());
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/ParticipationSummaryPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -34,9 +34,10 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
public class ParticipationSummaryPresenter extends SocialNetworkPresenter implements ParticipationSummary {
@@ -56,14 +57,14 @@
collabOnlyCategory = new GridGroup(i18n.t("collaborator in:"), " ", i18n.t("Collaborate in these groups"),
false);
super.addGroupOperation(gotoGroupMenuItem, false);
- final Slot<StateDTO> setStateSlot = new Slot<StateDTO>() {
+ final Listener<StateDTO> setStateListener = new Listener<StateDTO>() {
public void onEvent(StateDTO state) {
setState(state);
}
};
- stateManager.onStateChanged(setStateSlot);
- stateManager.onSocialNetworkChanged(setStateSlot);
- wsThemePresenter.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ stateManager.onStateChanged(setStateListener);
+ stateManager.onSocialNetworkChanged(setStateListener);
+ wsThemePresenter.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
view.setTheme(oldTheme, newTheme);
}
@@ -85,6 +86,8 @@
view.clear();
final List<GroupDTO> groupsIsAdmin = participation.getGroupsIsAdmin();
final List<GroupDTO> groupsIsCollab = participation.getGroupsIsCollab();
+ Log.info("Is admin in " + groupsIsAdmin.size() + " groups.");
+ Log.info("Is collab in " + groupsIsCollab.size() + " groups.");
final int numAdmins = groupsIsAdmin.size();
final int numCollaborators = groupsIsCollab.size();
if (numAdmins == 0) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/socialnet/SocialNetworkPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -21,8 +21,8 @@
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
public class SocialNetworkPresenter {
@@ -101,7 +101,7 @@
private void createButtons() {
requestJoin = new GridButton("images/add-green.gif", i18n.t("Participate"), i18n
- .t("Request to participate in this group"), new Slot<String>() {
+ .t("Request to participate in this group"), new Listener<String>() {
public void onEvent(final String parameter) {
Site.showProgressProcessing();
snServiceProvider.get().requestJoinGroup(session.getUserHash(),
@@ -127,7 +127,7 @@
});
unJoinButton = new GridButton("images/del.gif", i18n.t("Unjoin"), i18n
- .t("Don't participate more in this group"), new Slot<String>() {
+ .t("Don't participate more in this group"), new Listener<String>() {
public void onEvent(final String parameter) {
removeMemberAction();
}
@@ -162,25 +162,25 @@
private void createMenuActions() {
gotoGroupMenuItem = new MenuItem<GroupDTO>("images/group-home.gif", i18n.t("Visit this group homepage"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO groupDTO) {
stateManager.gotoToken(groupDTO.getShortName());
}
});
gotoMemberMenuItem = new MenuItem<GroupDTO>("images/group-home.gif", i18n.t("Visit this member homepage"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO groupDTO) {
stateManager.gotoToken(groupDTO.getShortName());
}
});
unJoinMenuItem = new MenuItem<GroupDTO>("images/del.gif", i18n
- .t("Don't participate more as a member in this group"), new Slot<GroupDTO>() {
+ .t("Don't participate more as a member in this group"), new Listener<GroupDTO>() {
public void onEvent(final GroupDTO groupDTO) {
removeMemberAction(groupDTO);
}
});
changeToCollabMenuItem = new MenuItem<GroupDTO>("images/arrow-down-green.gif",
- i18n.t("Change to collaborator"), new Slot<GroupDTO>() {
+ i18n.t("Change to collaborator"), new Listener<GroupDTO>() {
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().setAdminAsCollab(session.getUserHash(),
@@ -195,7 +195,7 @@
}
});
removeMemberMenuItem = new MenuItem<GroupDTO>("images/del.gif", i18n.t("Remove this member"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().deleteMember(session.getUserHash(),
@@ -214,7 +214,7 @@
}
});
changeToAdminMenuItem = new MenuItem<GroupDTO>("images/arrow-up-green.gif", i18n.t("Change to admin"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().setCollabAsAdmin(session.getUserHash(),
@@ -229,7 +229,7 @@
}
});
acceptJoinGroupMenuItem = new MenuItem<GroupDTO>("images/accept.gif", i18n.t("Accept this member"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().AcceptJoinGroup(session.getUserHash(),
@@ -244,7 +244,7 @@
}
});
denyJoinGroupMenuItem = new MenuItem<GroupDTO>("images/cancel.gif", i18n.t("Don't accept this member"),
- new Slot<GroupDTO>() {
+ new Listener<GroupDTO>() {
public void onEvent(final GroupDTO group) {
Site.showProgressProcessing();
snServiceProvider.get().denyJoinGroup(session.getUserHash(),
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/summary/GroupSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/summary/GroupSummaryPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/summary/GroupSummaryPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -25,20 +25,20 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
public class GroupSummaryPresenter implements GroupSummary {
private GroupSummaryView view;
public GroupSummaryPresenter(final StateManager stateManager, final WsThemePresenter wsThemePresenter) {
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
});
- wsThemePresenter.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ wsThemePresenter.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
view.setTheme(oldTheme, newTheme);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -32,9 +32,9 @@
import org.ourproject.kune.workspace.client.themes.WsTheme;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
public class TagsSummaryPresenter implements TagsSummary {
@@ -46,12 +46,12 @@
final StateManager stateManager, final WsThemePresenter wsThemePresenter) {
this.session = session;
this.searcherProvider = searcherProvider;
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
});
- wsThemePresenter.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ wsThemePresenter.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
view.setTheme(oldTheme, newTheme);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePanel.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePanel.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePanel.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -3,7 +3,7 @@
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener2;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.menu.BaseItem;
@@ -28,7 +28,7 @@
super.setIcon("images/colors.gif");
super.setTooltip(i18n.t("Select Workspace theme for this group"));
ws.getSiteTraybar().addButton(this);
- presenter.onThemeChanged(new Slot2<WsTheme, WsTheme>() {
+ presenter.onThemeChanged(new Listener2<WsTheme, WsTheme>() {
public void onEvent(final WsTheme oldTheme, final WsTheme newTheme) {
ws.setTheme(oldTheme, newTheme);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/themes/WsThemePresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -8,16 +8,16 @@
import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Signal2;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Event2;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
public class WsThemePresenter {
private WsThemeView view;
private WsTheme previousTheme;
- private final Signal2<WsTheme, WsTheme> onThemeChanged;
+ private final Event2<WsTheme, WsTheme> onThemeChanged;
private final Provider<GroupServiceAsync> groupServiceProvider;
private final Session session;
@@ -25,14 +25,14 @@
final StateManager stateManager) {
this.session = session;
this.groupServiceProvider = groupServiceProvider;
- this.onThemeChanged = new Signal2<WsTheme, WsTheme>("onThemeChanged");
- session.onInitDataReceived(new Slot<InitDataDTO>() {
+ this.onThemeChanged = new Event2<WsTheme, WsTheme>("onThemeChanged");
+ session.onInitDataReceived(new Listener<InitDataDTO>() {
public void onEvent(final InitDataDTO initData) {
view.setThemes(initData.getWsThemes());
setTheme(new WsTheme(initData.getWsThemes()[0]));
}
});
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
@@ -43,8 +43,8 @@
this.view = view;
}
- public void onThemeChanged(final Slot2<WsTheme, WsTheme> slot) {
- onThemeChanged.add(slot);
+ public void onThemeChanged(final Listener2<WsTheme, WsTheme> listener) {
+ onThemeChanged.add(listener);
}
protected void onChangeGroupWsTheme(final WsTheme newTheme) {
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntitySubTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntitySubTitlePresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntitySubTitlePresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -25,7 +25,7 @@
import org.ourproject.kune.platf.client.services.I18nTranslationService;
import org.ourproject.kune.platf.client.state.StateManager;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class EntitySubTitlePresenter implements EntitySubTitle {
@@ -34,7 +34,7 @@
public EntitySubTitlePresenter(final I18nTranslationService i18n, final StateManager stateManager) {
this.i18n = i18n;
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
Modified: trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/main/java/org/ourproject/kune/workspace/client/title/EntityTitlePresenter.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -33,8 +33,8 @@
import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.site.Site;
-import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.ioc.Provider;
+import com.calclab.suco.client.listener.Listener;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -56,7 +56,7 @@
this.session = session;
this.contentServiceProvider = contentServiceProvider;
this.contextNavigatorProvider = contextNavigatorProvider;
- stateManager.onStateChanged(new Slot<StateDTO>() {
+ stateManager.onStateChanged(new Listener<StateDTO>() {
public void onEvent(final StateDTO state) {
setState(state);
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/actions/ActionRegistryTest.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.platf.client.dto.AccessRolDTO;
import org.ourproject.kune.platf.client.dto.StateToken;
-import com.calclab.suco.client.signal.Slot;
+import com.calclab.suco.client.listener.Listener;
public class ActionRegistryTest {
@@ -19,22 +19,29 @@
private ActionDescriptor<StateToken> editorAction;
private ActionDescriptor<StateToken> viewerAction;
+ @Test
+ public void actionsEmptyButNeverNull() {
+ checkActionLists(0, 0, new AccessRightsDTO(true, true, true));
+ checkActionLists(0, 0, new AccessRightsDTO(false, true, true));
+ checkActionLists(0, 0, new AccessRightsDTO(false, false, true));
+ }
+
@Before
public void before() {
registry = new ActionRegistry<StateToken>();
adminAction = new ActionDescriptor<StateToken>(AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu,
- new Slot<StateToken>() {
+ new Listener<StateToken>() {
public void onEvent(final StateToken parameter) {
}
});
editorAction = new ActionDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
- new Slot<StateToken>() {
+ new Listener<StateToken>() {
public void onEvent(final StateToken parameter) {
}
});
viewerAction = new ActionDescriptor<StateToken>(AccessRolDTO.Viewer, ActionPosition.topbarAndItemMenu,
- new Slot<StateToken>() {
+ new Listener<StateToken>() {
public void onEvent(final StateToken parameter) {
}
});
Modified: trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/test/java/org/ourproject/kune/platf/client/state/StateManagerTest.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -8,8 +8,8 @@
import org.ourproject.kune.platf.client.dto.StateToken;
import org.ourproject.kune.workspace.client.site.SiteToken;
-import com.calclab.suco.client.signal.Slot;
-import com.calclab.suco.client.signal.Slot2;
+import com.calclab.suco.client.listener.Listener;
+import com.calclab.suco.client.listener.Listener2;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class StateManagerTest {
@@ -22,24 +22,24 @@
@SuppressWarnings("unchecked")
@Test
- public void changeStateWithDifferentGroupsMustFireSlot() {
- final Slot2<String, String> groupSlot = Mockito.mock(Slot2.class);
- stateManager.onGroupChanged(groupSlot);
+ public void changeStateWithDifferentGroupsMustFireListener() {
+ final Listener2<String, String> groupListener = Mockito.mock(Listener2.class);
+ stateManager.onGroupChanged(groupListener);
stateManager.onHistoryChanged("group1.tool1");
stateManager.onHistoryChanged("group2.tool1");
// TODO, think how to test this
- // Mockito.verify(groupSlot).onEvent("group1", "group2");
+ // Mockito.verify(groupListener).onEvent("group1", "group2");
}
@SuppressWarnings("unchecked")
@Test
- public void changeStateWithDifferentToolsMustFireSlot() {
- final Slot2<String, String> toolSlot = Mockito.mock(Slot2.class);
- stateManager.onToolChanged(toolSlot);
+ public void changeStateWithDifferentToolsMustFireListener() {
+ final Listener2<String, String> toolListener = Mockito.mock(Listener2.class);
+ stateManager.onToolChanged(toolListener);
stateManager.gotoToken("group1.tool1");
stateManager.gotoToken("group1.tool2");
// TODO, think how to test this
- // Mockito.verify(toolSlot).onEvent("tool1", "tool2");
+ // Mockito.verify(toolListener).onEvent("tool1", "tool2");
}
@SuppressWarnings("unchecked")
@@ -73,12 +73,12 @@
@SuppressWarnings("unchecked")
@Test
- public void siteTokenFirstLoadDefContentAndFireSlot() {
- final Slot slot = Mockito.mock(Slot.class);
+ public void siteTokenFirstLoadDefContentAndFireListener() {
+ final Listener listener = Mockito.mock(Listener.class);
final String token = SiteToken.signin.toString();
- stateManager.addSiteToken(token, slot);
+ stateManager.addSiteToken(token, listener);
stateManager.onHistoryChanged(token);
- Mockito.verify(slot, Mockito.times(1)).onEvent(Mockito.anyObject());
+ Mockito.verify(listener, Mockito.times(1)).onEvent(Mockito.anyObject());
Mockito.verify(contentProvider, Mockito.times(1)).getContent(Mockito.anyString(),
(StateToken) Mockito.anyObject(), (AsyncCallback<StateDTO>) Mockito.anyObject());
}
Modified: trunk/src/test/java/org/ourproject/kune/platf/integration/site/UserServiceTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/integration/site/UserServiceTest.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/test/java/org/ourproject/kune/platf/integration/site/UserServiceTest.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -28,7 +28,7 @@
import org.ourproject.kune.platf.server.users.UserInfoService;
import org.ourproject.kune.workspace.client.site.rpc.UserService;
-import com.calclab.emite.client.im.roster.RosterManager.SubscriptionMode;
+import com.calclab.emiteuimodule.client.SubscriptionMode;
import com.google.inject.Inject;
public class UserServiceTest extends IntegrationTest {
Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileManagerTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileManagerTest.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileManagerTest.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,62 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ourproject.kune.platf.server.TestHelper;
+import org.ourproject.kune.platf.server.manager.FileManager;
+
+import com.google.inject.Inject;
+
+public class FileManagerTest {
+
+ @Inject
+ FileManager fileManager;
+ private String tempDir;
+
+ @Before
+ public void inject() throws IOException {
+ TestHelper.inject(this);
+ tempDir = File.createTempFile("temp", "txt").getParent();
+ }
+
+ @Test
+ public void test3FileCreationWithSeq() throws IOException {
+ final File tempFile = File.createTempFile("some file name", ".txt");
+ final File newFile1 = fileManager.createFileWithSequentialName(tempDir, tempFile.getName());
+ final File newFile2 = fileManager.createFileWithSequentialName(tempDir, tempFile.getName());
+ final File newFile3 = fileManager.createFileWithSequentialName(tempDir, tempFile.getName());
+ assertEquals(tempDir + File.separator + seq(seq(seq(tempFile.getName()))), newFile3.getAbsolutePath());
+ newFile1.delete();
+ newFile2.delete();
+ newFile3.delete();
+ }
+
+ @Test
+ public void testDirCreation() throws IOException {
+ final String newTestDir = tempDir + File.separator + "test1" + File.separator + "test2" + File.separator;
+ assertTrue(fileManager.mkdir(newTestDir));
+ final File dir = new File(newTestDir);
+ assertTrue(dir.exists());
+ fileManager.rmdir(newTestDir);
+ assertFalse(dir.exists());
+ }
+
+ @Test
+ public void testFileCreationWithSeq() throws IOException {
+ final File tempFile = File.createTempFile("some file name", ".txt");
+ final File newFile = fileManager.createFileWithSequentialName(tempDir, tempFile.getName());
+ assertEquals(tempDir + File.separator + seq(tempFile.getName()), newFile.getAbsolutePath());
+ newFile.delete();
+ }
+
+ private String seq(final String file) {
+ return FileUtils.getNextSequentialFileName(file, true);
+ }
+}
Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/FileUtilsTest.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -0,0 +1,53 @@
+package org.ourproject.kune.platf.server.manager.impl;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class FileUtilsTest {
+
+ private static final String SIMPLE_FILE_NAME = "simple file name";
+ private static final String EXT = ".someext";
+
+ @Test
+ public void dotFileRetSeq1() {
+ assertEquals("." + SIMPLE_FILE_NAME + " 1", FileUtils.getNextSequentialFileName("." + SIMPLE_FILE_NAME, true));
+ }
+
+ @Test
+ public void dotFileRetSeq1IgnoreExt() {
+ assertEquals("." + SIMPLE_FILE_NAME + " 1", FileUtils.getNextSequentialFileName("." + SIMPLE_FILE_NAME, false));
+ }
+
+ @Test
+ public void testIfSeq101return102() {
+ assertEquals(SIMPLE_FILE_NAME + " 102", FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + " 101"));
+ }
+
+ @Test
+ public void testIfSeq1return2() {
+ assertEquals(SIMPLE_FILE_NAME + " 2", FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + " 1"));
+ }
+
+ @Test
+ public void testIfSeq1WithExtreturn2WithExt() {
+ assertEquals(SIMPLE_FILE_NAME + " 2" + EXT, FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + " 1" + EXT,
+ true));
+ }
+
+ @Test
+ public void testNoSeqReturn1() {
+ assertEquals(SIMPLE_FILE_NAME + " 1", FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME));
+ }
+
+ @Test
+ public void testNoSeqWithExtNotTakedIntoAccountReturn1() {
+ assertEquals(SIMPLE_FILE_NAME + EXT + " 1", FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + EXT, false));
+ }
+
+ @Test
+ public void testNoSeqWithExtReturn1WithExt() {
+ assertEquals(SIMPLE_FILE_NAME + " 1" + EXT, FileUtils.getNextSequentialFileName(SIMPLE_FILE_NAME + EXT, true));
+ }
+
+}
Modified: trunk/src/test/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenterTest.java
===================================================================
--- trunk/src/test/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenterTest.java 2008-09-23 12:02:42 UTC (rev 880)
+++ trunk/src/test/java/org/ourproject/kune/workspace/client/tags/TagsSummaryPresenterTest.java 2008-09-24 01:47:16 UTC (rev 881)
@@ -9,7 +9,7 @@
import org.ourproject.kune.workspace.client.search.SiteSearcher;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.ioc.Provider;
public class TagsSummaryPresenterTest {
1
0
Author: vjrj
Date: 2008-09-23 14:02:42 +0200 (Tue, 23 Sep 2008)
New Revision: 880
Modified:
trunk/script/deploy_gwt.sh
Log:
using rsync instead of unison
Modified: trunk/script/deploy_gwt.sh
===================================================================
--- trunk/script/deploy_gwt.sh 2008-09-23 11:57:19 UTC (rev 879)
+++ trunk/script/deploy_gwt.sh 2008-09-23 12:02:42 UTC (rev 880)
@@ -8,5 +8,5 @@
script/css-update.sh
cp target/kune-0.0.4/org.ourproject.kune.app.Kune/js/ext/ext-all-debug.js target/kune-0.0.4/org.ourproject.kune.app.Kune/js/ext/ext-all.js
-unison -silent -batch -auto -ui text target/kune-0.0.4/org.ourproject.kune.app.Kune src/main/webapp/gwt/org.ourproject.kune.app.Kune
+rsync --delete -C -r -p target/kune-0.0.4/org.ourproject.kune.app.Kune/ src/main/webapp/gwt/org.ourproject.kune.app.Kune/
1
0
Author: vjrj
Date: 2008-09-23 13:57:19 +0200 (Tue, 23 Sep 2008)
New Revision: 879
Modified:
trunk/src/main/java/org/ourproject/kune/app/public/css/
trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css
Log:
ignore some css
Property changes on: trunk/src/main/java/org/ourproject/kune/app/public/css
___________________________________________________________________
Name: svn:ignore
+ all.css
richtext.css
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/all.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2008-09-22 11:53:01 UTC (rev 878)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/all.css 2008-09-23 11:57:19 UTC (rev 879)
@@ -3,25 +3,2124 @@
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}/*
+*/
+body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input, textarea, select{font-family:inherit;font-size:inherit;font-weight:inherit;}
+
+/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/body{font:13px/1.22 arial,helvetica,clean,sans-serif;font-size:small;font:x-small;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;font-size:108%;line-height:99%;}/*
- * Ext JS Library 2.0.2
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing(a)extjs.com
- *
- * http://extjs.com/license
- */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:400;}ol,ul{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}.ext-el-mask{z-index:20000;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:100%;height:100%;zoom:1;}.ext-el-mask-msg{z-index:20001;position:absolute;top:0;left:0;border:1px solid #6593cf;background:#c3daf9 url(../js/ext/resources/images/default/box/tb-blue.gif) repeat-x 0 -16px;padding:2px;}.ext-el-mask-msg div{padding:5px 10px;background:#eee;border:1px solid #a3bad9;color:#222;font:normal 100% arial,sans;cursor:wait;}.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:#fbfbfb url(../js/ext/resources/images/default/grid/loading.gif) no-repeat 5px 5px;line-height:16px;}.x-hidden,.x-hide-offsets{position:absolute;left:-10000px;top:-10000px;visibility:hidden;}.x-hide-display{display:none!important;}.x-hide-visibility{visibility:hidden!important;}.x-masked{overflow:hidden!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;}.x-repaint{zoom:1;background-color:transparent;-moz-outline:none;}.x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}.x-item-disabled *{color:gray!important;cursor:default!important;}.x-splitbar-proxy{position:absolute;visibility:hidden;z-index:20001;background:#aaa;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;}.x-color-palette a{border:1px solid #fff;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer;}.x-color-palette a:hover,.x-color-palette a.x-color-palette-sel{border:1px solid #8BB8F3;background:#deecfd;}.x-color-palette em{display:block;border:1px solid #ACA899;}.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;background:#777;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 url(../js/ext/resources/images/default/shadow-c.png);}.x-shadow .xst,.x-shadow .xsb{height:6px;overflow:hidden;width:100%;}.x-shadow .xsml{background:transparent url(../js/ext/resources/images/default/shadow-lr.png) repeat-y 0 0;}.x-shadow .xsmr{background:transparent url(../js/ext/resources/images/default/shadow-lr.png) repeat-y -6px 0;}.x-shadow .xstl{background:transparent url(../js/ext/resources/images/default/shadow.png) no-repeat 0 0;}.x-shadow .xstc{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -30px;}.x-shadow .xstr{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -18px;}.x-shadow .xsbl{background:transparent url(../js/ext/resources/images/default/shadow.png) no-repeat 0 -12px;}.x-shadow .xsbc{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -36px;}.x-shadow .xsbr{background:transparent url(../js/ext/resources/images/default/shadow.png) repeat-x 0 -6px;}.loading-indicator{font-size:100%;background-image:url(../js/ext/resources/images/default/grid/loading.gif);background-repeat:no-repeat;background-position: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(../js/ext/resources/images/default/s.gif);z-index:20000;}.x-clear{clear:both;height:0;overflow:hidden;line-height:0;font-size:0;}.x-spotlight{z-index:8999;position:absolute;top:0;left:0;-moz-opacity:.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:0;height:0;zoom:1;}.x-tab-panel{overflow:hidden;}.x-tab-panel-header,.x-tab-panel-footer{background:#deecfd;border:1px solid #8db2e3;overflow:hidden;zoom:1;}.x-tab-panel-header{border:1px solid #8db2e3;padding-bottom:2px;}.x-tab-panel-footer{border:1px solid #8db2e3;padding-top:2px;}.x-tab-strip-wrap{width:100%;overflow:hidden;position:relative;zoom:1;}ul.x-tab-strip{display:block;width:5000px;zoom:1;}ul.x-tab-strip-top{padding-top:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom;border-bottom:1px solid #8db2e3;}ul.x-tab-strip-bottom{padding-bottom:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top;border-top:1px solid #8db2e3;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{border:1px solid #8db2e3;border-top:0 none;height:2px;background:#deecfd;font-size:1px;line-height:1px;}.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer{height:3px;}ul.x-tab-strip li{float:left;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{font:normal 100% arial,sans;color:#416aa3;white-space:nowrap;cursor:pointer;padding:4px 0;}.x-tab-strip .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-over span.x-tab-strip-text{color:#15428b;}.x-tab-strip-active{cursor:default;}.x-tab-strip-active span.x-tab-strip-text{cursor:default;color:#15428b;font-weight:700;}.x-tab-strip-disabled .x-tabs-text{cursor:default;color:#aaa;}.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 url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat 0 -51px;padding-left:10px;}.x-tab-strip-top .x-tab-left{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat right -351px;padding-right:10px;}.x-tab-strip-top .x-tab-strip-inner{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) 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:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;}.x-tab-strip-bottom .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background:url(../js/ext/resources/images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-left-bg.gif) 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{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);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{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);opacity:1;-moz-opacity:1;}.x-tab-panel-body{border:1px solid #8db2e3;background:#fff;}.x-tab-panel-body-top{border-top:0 none;}.x-tab-panel-body-bottom{border-bottom:0 none;}.x-tab-scroller-left{background:transparent url(../js/ext/resources/images/default/tabs/scroll-left.gif) no-repeat -18px 0;border-bottom:1px solid #8db2e3;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 url(../js/ext/resources/images/default/tabs/scroll-right.gif) no-repeat 0 0;border-bottom:1px solid #8db2e3;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 .x-tab-strip-wrap{margin-left:18px;margin-right:18px;}.x-tab-scrolling{position:relative;}.x-tab-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-tab-panel-tbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-border-layout-ct .x-tab-panel{background:#FFF;}.x-form-field{margin:0;font:normal 100% arial,sans;}.x-form-text,textarea.x-form-field{padding:1px 3px;background:#fff url(../js/ext/resources/images/default/form/text-bg.gif) repeat-x 0 0;border:1px solid #B5B8C8;}textarea.x-form-field{padding:2px 3px;}.x-form-text{height:22px;line-height:18px;vertical-align:middle;}.ext-ie .x-form-text{margin:-1px 0;height:22px;line-height:18px;}.ext-ie textarea.x-form-field{margin:-1px 0;}.ext-strict .x-form-text{height:18px;}.ext-safari .x-form-text{height:20px;padding:0 3px;}.ext-safari.ext-mac textarea.x-form-field{margin-bottom:-2px;}.ext-gecko .x-form-text{padding-top:2px;padding-bottom:0;}textarea{resize:none;}.x-form-select-one{height:20px;line-height:18px;vertical-align:middle;background-color:#fff;border:1px solid #B5B8C8;}.x-form-field-wrap{position:relative;zoom:1;white-space:nowrap;}.x-editor .x-form-check-wrap{background:#fff;}.x-form-field-wrap .x-form-trigger{width:17px;height:21px;border:0;background:transparent url(../js/ext/resources/images/default/form/trigger.gif) no-repeat 0 0;cursor:pointer;border-bottom:1px solid #B5B8C8;position:absolute;top:0;}.ext-safari .x-form-field-wrap .x-form-trigger{height:21px;}.x-form-field-wrap .x-form-date-trigger{background-image:url(../js/ext/resources/images/default/form/date-trigger.gif);cursor:pointer;}.x-form-field-wrap .x-form-clear-trigger{background-image:url(../js/ext/resources/images/default/form/clear-trigger.gif);cursor:pointer;}.x-form-field-wrap .x-form-search-trigger{background-image:url(../js/ext/resources/images/default/form/search-trigger.gif);cursor:pointer;}.ext-safari .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 .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 #7eadd9;}.x-item-disabled .x-form-trigger-over{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}.x-item-disabled .x-form-trigger-click{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}.x-form-focus,textarea.x-form-focus{border:1px solid #7eadd9;}.x-form-invalid,textarea.x-form-invalid{background:#fff url(../js/ext/resources/images/default/grid/invalid_line.gif) repeat-x bottom;border:1px solid #dd7870;}.ext-safari .x-form-invalid{background-color:#fee;border:1px solid #ff7870;}.x-editor{visibility:hidden;padding:0;margin:0;}.x-form-check-wrap{line-height:18px;}.ext-ie .x-form-check-wrap input{width:15px;height:15px;}.x-editor .x-form-check-wrap{padding:3px;}.x-editor .x-form-checkbox{height:13px;}.x-form-grow-sizer{font:normal 100% arial,sans;left:-10000px;padding:8px 3px;position:absolute;visibility:hidden;top:-10000px;white-space:pre-wrap;white-space:0;white-space:0;white-space:0;word-wrap:break-word;zoom:1;}.x-form-grow-sizer p{margin:0!important;border:0 none!important;padding:0!important;}.x-form-item{font:normal 100% arial,sans;display:block;margin-bottom:4px;}.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{color:#e00;padding:2px;padding-left:18px;font:normal 100% arial,sans;background:transparent url(../js/ext/resources/images/default/shared/warning.gif) no-repeat 0 2px;line-height:16px;width:200px;}.x-form-label-right label{text-align:right;}.x-form-label-top .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-form-empty-field{color:gray;}.x-small-editor .x-form-field{font:normal 100% arial,sans;}.x-small-editor .x-form-text{height:20px;line-height:16px;vertical-align:middle;}.ext-ie .x-small-editor .x-form-text{margin-top:-1px!important;margin-bottom:-1px!important;height:20px!important;line-height:16px!important;}.ext-strict .x-small-editor .x-form-text{height:16px!important;}.ext-safari .x-small-editor .x-form-field{font:normal 100% arial,sans;}.ext-ie .x-small-editor .x-form-text{height:20px;line-height:16px;}.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;height:0;overflow:hidden;line-height:0;font-size:0;}.x-form-clear-left{clear:left;height:0;overflow:hidden;line-height:0;font-size: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;visibility:hidden;position:absolute;left:0;top:0;display:block;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 0 2px;}.x-fieldset{border:1px solid #B5B8C8;padding:10px;margin-bottom:10px;}.x-fieldset legend{font:bold 100% arial,sans;color:#15428b;}.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 0 0!important;}fieldset.x-panel-collapsed .x-fieldset-bwrap{visibility:hidden;position:absolute;left:-1000px;top:-1000px;}.ext-ie .x-fieldset-bwrap{zoom:1;}.ext-ie td .x-form-text{position:relative;top:-1px;}.x-fieldset-noborder{border:0 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:-5px;}.ext-gecko .x-window-body .x-form-item{-moz-outline:none;overflow:auto;}.ext-gecko .x-form-item{-moz-outline:none;}.x-hide-label label.x-form-item-label{display:none;}.x-hide-label .x-form-element{padding-left:0!important;}.x-fieldset{overflow:hidden;}.x-fieldset-bwrap{overflow:hidden;zoom:1;}.x-fieldset-body{overflow:hidden;}.x-btn{font:normal 100% arial,sans;cursor:pointer;white-space:nowrap;}.x-btn button{border:0 none;background:transparent;padding-left:3px;padding-right:3px;cursor:pointer;margin:0;overflow:visible;width:auto;-moz-outline:0 none;outline:0 none;}* html .ext-ie .x-btn button{width:1px;}.ext-gecko .x-btn button{padding-left:0;padding-right:0;}.ext-ie .x-btn button{padding-top:2px;}.x-btn-icon .x-btn-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 .x-btn-center{padding:1px;}.x-btn em{font-style:normal;font-weight:400;}.x-btn-text-icon .x-btn-center .x-btn-text{background-position:0 2px;background-repeat:no-repeat;padding-left:18px;padding-top:3px;padding-bottom:2px;padding-right:0;}.x-btn-left,.x-btn-right{font-size:1px;line-height:1px;}.x-btn-left{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 0;}.x-btn-right{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -21px;}.x-btn-left i,.x-btn-right i{display:block;width:3px;overflow:hidden;font-size:1px;line-height:1px;}.x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -42px;vertical-align:middle;text-align:center;padding:0 5px;cursor:pointer;white-space:nowrap;}.x-btn-over .x-btn-left{background-position:0 -63px;}.x-btn-over .x-btn-right{background-position:0 -84px;}.x-btn-over .x-btn-center{background-position:0 -105px;}.x-btn-click .x-btn-center,.x-btn-menu-active .x-btn-center{background-position:0 -126px;}.x-btn-disabled *{color:gray!important;cursor:default!important;}.x-btn-menu-text-wrap .x-btn-center{padding:0 3px;}.ext-gecko .x-btn-menu-text-wrap .x-btn-center{padding:0 1px;}.x-btn-menu-arrow-wrap .x-btn-center{padding:0;}.x-btn-menu-arrow-wrap .x-btn-center button{width:12px!important;height:21px;padding:0!important;display:block;background:transparent url(../js/ext/resources/images/default/button/btn-arrow.gif) no-repeat left 3px;}.x-btn-with-menu .x-btn-center{padding-right:2px!important;}.x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 0;padding-right:10px;}.x-btn-text-icon .x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 3px;padding-right:10px;}.x-btn-pressed .x-btn-left{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -63px;}.x-btn-pressed .x-btn-right{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -84px;}.x-btn-pressed .x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -126px;}.x-toolbar{border-color:#a9bfd3;border-style:solid;border-width:0 0 1px;display:block;padding:2px;background:#d0def0 url(../js/ext/resources/images/default/toolbar/bg.gif) repeat-x top left;position:relative;zoom:1;}.x-toolbar .x-item-disabled .x-btn-icon{opacity:.35;-moz-opacity:.35;filter:alpha(opacity=35);}.x-toolbar td{vertical-align:middle;}.mso .x-toolbar,.x-grid-mso .x-toolbar{border:0 none;background:url(../js/ext/resources/images/default/grid/mso-hd.gif);}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial,sans;}.x-toolbar .x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}.x-toolbar .x-item-disabled *{color:gray;cursor:default;}.x-toolbar .x-btn-left{background:none;}.x-toolbar .x-btn-right{background:none;}.x-toolbar .x-btn-center{background:none;padding:0;}.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:2px;}.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:0;}.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{padding:0 2px;}.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button{background-position:0 -47px;}.x-toolbar .x-btn-over .x-btn-left{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;}.x-toolbar .x-btn-over .x-btn-right{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;}.x-toolbar .x-btn-over .x-btn-center{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;}.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:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;}.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:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;}.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:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;}.x-toolbar .x-btn-with-menu .x-btn-center em{padding-right:8px;}.x-toolbar .ytb-text{padding:2px;}.x-toolbar .ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-blue-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.x-toolbar .ytb-spacer{width:2px;}.x-tbar-page-number{width:24px;height:14px;}.x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first.gif)!important;}.x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/done.gif)!important;}.x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last.gif)!important;}.x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next.gif)!important;}.x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev.gif)!important;}.x-item-disabled .x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/loading.gif)!important;}.x-item-disabled .x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first-disabled.gif)!important;}.x-item-disabled .x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last-disabled.gif)!important;}.x-item-disabled .x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next-disabled.gif)!important;}.x-item-disabled .x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev-disabled.gif)!important;}.x-paging-info{position:absolute;top:5px;right:8px;color:#444;}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;background:#FFF;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{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background:url(../js/ext/resources/images/default/sizer/se-handle.gif);background-position:top left;}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background:url(../js/ext/resources/images/default/sizer/nw-handle.gif);background-position:bottom right;}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background:url(../js/ext/resources/images/default/sizer/ne-handle.gif);background-position:bottom left;}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background:url(../js/ext/resources/images/default/sizer/sw-handle.gif);background-position:top right;}.x-resizable-proxy{border:1px dashed #3b5a82;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;background:#FFF;z-index:200000;-moz-opacity:0;opacity:0;filter:alpha(opacity=0);}.x-grid3{position:relative;overflow:hidden;background-color:#fff;}.x-grid-panel .x-panel-body{overflow:hidden!important;}.x-grid-panel .x-panel-mc .x-panel-body{border:1px solid #99bbe8;}.ext-ie .x-grid3 table,.ext-safari .x-grid3 table{table-layout:fixed;}.x-grid3-viewport{overflow:hidden;}.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td{font:normal 100% arial,sans;-moz-outline:none;-moz-user-focus:normal;}.x-grid3-row td,.x-grid3-summary-row td{line-height:13px;vertical-align:top;padding-left:1px;padding-right:1px;-moz-user-select:none;}.x-grid3-hd-row td{line-height:15px;vertical-align:middle;border-left:1px solid #eee;border-right:1px solid #d0d0d0;}.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;}.x-grid3-row-body{white-space:normal;}.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:#fff url(../js/ext/resources/images/default/shared/loading-balls.gif) no-repeat center center;}.x-grid-page{overflow:hidden;}.x-grid3-row{cursor:default;border:1px solid #ededed;border-top-color:#fff;width:100%;}.x-grid3-row-alt{background-color:#fafafa;}.x-grid3-row-over{border:1px solid #ddd;background:#efefef url(../js/ext/resources/images/default/grid/row-over.gif) repeat-x left top;}.x-grid3-resize-proxy{width:1px;left:0;background-color:#777;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;background-color:#777;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}.x-grid3-focus{position:absolute;top:0;-moz-outline:0 none;outline:0 none;-moz-user-select:normal;-khtml-user-select:normal;}.x-grid3-header{background:#f9f9f9 url(../js/ext/resources/images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;cursor:default;zoom:1;padding:1px 0 0;}.x-grid3-header-pop{border-left:1px solid #d0d0d0;float:right;clear:none;}.x-grid3-header-pop-inner{border-left:1px solid #eee;width:14px;height:19px;background:transparent url(../js/ext/resources/images/default/grid/hd-pop.gif) 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;width:10000px;}td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open{border-left:1px solid #aaccf6;border-right:1px solid #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:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) 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{background-image:url(../js/ext/resources/images/default/grid/sort_asc.gif);display:inline;}.sort-desc .x-grid3-sort-icon{background-image:url(../js/ext/resources/images/default/grid/sort_desc.gif);display:inline;}.ext-strict .ext-ie .x-grid3-header-inner{position:relative;}.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;-moz-user-select:none;-khtml-user-select:none;color:#000;}.x-grid3-split{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);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-grid3-hd-text{color:#15428b;}.x-dd-drag-proxy .x-grid3-hd-inner{background:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;width:120px;padding:3px;border:1px solid #aaccf6;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;}.col-move-top{background:transparent url(../js/ext/resources/images/default/grid/col-move-top.gif) no-repeat left top;}.col-move-bottom{background:transparent url(../js/ext/resources/images/default/grid/col-move-bottom.gif) no-repeat left top;}.x-grid3-row-selected{background:#DFE8F6!important;border:1px dotted #a3bae9;}.x-grid3-cell-selected{background-color:#B8CFEE!important;color:#000;}.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:#ebeadb url(../js/ext/resources/images/default/grid/grid-hrow.gif) repeat-x 0 bottom!important;vertical-align:middle!important;color:#000;padding:0;border-top:1px solid #FFF;border-bottom:none!important;border-right:1px solid #6fa0df!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;color:#15428b!important;text-align:center;}.x-grid3-dirty-cell{background:transparent url(../js/ext/resources/images/default/grid/dirty.gif) no-repeat 0 0;}.x-grid3-topbar,.x-grid3-bottombar{font:normal 100% arial,sans;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 #a9bfd3;}.x-props-grid .x-grid3-cell{padding:1px;}.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y -16px!important;padding-left:12px;color:#000!important;}.x-props-grid .x-grid3-body .x-grid3-td-name{padding:1px;padding-right:0;background:#FFF!important;border:0 none;border-right:1px solid #eee;}.xg-hmenu-sort-asc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-asc.gif);}.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-desc.gif);}.xg-hmenu-lock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-lock.gif);}.xg-hmenu-unlock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-unlock.gif);}.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;}.x-grid3-hd-btn{display:none;position:absolute;width:14px;background:#c3daf9 url(../js/ext/resources/images/default/grid/grid3-hd-btn.gif) no-repeat left center;right:0;top:0;z-index:2;cursor:pointer;}.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 url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) 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;background-image:url(../js/ext/resources/images/default/grid/row-expand-sprite.gif);}.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 url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) 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-row-checker,.x-grid3-hd-checker{width:100%;height:18px;background-position:2px 2px;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/grid/row-check-sprite.gif);}.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{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 url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner{padding:3px 5px 0 0!important;text-align:right;color:#444;}.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 url(../js/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif) repeat-y right;}.x-grid3-body .x-grid3-check-col-td .x-grid3-cell-inner{padding:1px 0 0!important;}.x-grid3-check-col{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/unchecked.gif);}.x-grid3-check-col-on{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/checked.gif);}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1;}.x-grid-group-hd{border-bottom:2px solid #99bbe8;cursor:pointer;padding-top:6px;}.x-grid-group-hd div{background:transparent url(../js/ext/resources/images/default/grid/group-expand-sprite.gif) no-repeat 3px -47px;padding:4px 4px 4px 17px;color:#3764a0;font:bold 100% arial,sans;}.x-grid-group-collapsed .x-grid-group-hd div{background-position:3px 3px;}.x-grid-group-collapsed .x-grid-group-body{display:none;}.x-group-by-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}.x-cols-icon{background-image:url(../js/ext/resources/images/default/grid/columns.gif);}.x-show-groups-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}.ext-ie .x-grid3 .x-editor .x-form-text{position:relative;top:-1px;}.ext-ie .x-props-grid .x-editor .x-form-text{position:static;top:0;}.x-grid-empty{padding:10px;color:gray;font:normal 100% arial,sans;}.ext-ie7 .x-grid-panel .x-panel-bbar{position:relative;}.x-dd-drag-proxy{position:absolute;left:0;top:0;visibility:hidden;z-index:15000;}.x-dd-drag-ghost{color:#000;font:normal 100% arial,helvetica,sans-serif;-moz-opacity:.85;opacity:.85;filter:alpha(opacity=85);border-top:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #bbb;border-bottom:1px solid #bbb;padding:3px;padding-left:20px;background-color:#FFF;white-space:nowrap;}.x-dd-drag-repair .x-dd-drag-ghost{-moz-opacity:.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-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-no.gif);}.x-dd-drop-ok .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-yes.gif);}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-add.gif);}.x-view-selector{position:absolute;left:0;top:0;width:0;background:#c3daf9;border:1px dotted #39b;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);zoom:1;}.x-tree .x-panel-body{background-color:#fff;}.ext-strict .ext-ie .x-tree .x-panel-bwrap{position:relative;overflow:hidden;}.x-tree-icon,.x-tree-ec-icon,.x-tree-elbow-line,.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-repeat:no-repeat;}.x-tree-node-collapsed .x-tree-node-icon,.x-tree-node-expanded .x-tree-node-icon,.x-tree-node-leaf .x-tree-node-icon{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-position:center;background-repeat:no-repeat;}.ext-ie .x-tree-node-indent img,.ext-ie .x-tree-node-icon,.ext-ie .x-tree-ec-icon{vertical-align:middle!important;}.x-tree-node-expanded .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder-open.gif);}.x-tree-node-leaf .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/leaf.gif);}.x-tree-node-collapsed .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder.gif);}.ext-ie input.x-tree-node-cb{width:15px;height:15px;}input.x-tree-node-cb{margin-left:1px;}.ext-ie input.x-tree-node-cb{margin-left:0;}.x-tree-noicon .x-tree-node-icon{width:0;height:0;}.x-tree-node-loading .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/loading.gif)!important;}.x-tree-node-loading a span{font-style:italic;color:#444;}.ext-ie .x-tree-node-el input{width:15px;height:15px;}.x-tree-lines .x-tree-elbow{background-image:url(../js/ext/resources/images/default/tree/elbow.gif);}.x-tree-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus.gif);}.x-tree-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus.gif);}.x-tree-lines .x-tree-elbow-end{background-image:url(../js/ext/resources/images/default/tree/elbow-end.gif);}.x-tree-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus.gif);}.x-tree-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus.gif);}.x-tree-lines .x-tree-elbow-line{background-image:url(../js/ext/resources/images/default/tree/elbow-line.gif);}.x-tree-no-lines .x-tree-elbow{background:transparent;}.x-tree-no-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus-nl.gif);}.x-tree-no-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus-nl.gif);}.x-tree-no-lines .x-tree-elbow-end{background:transparent;}.x-tree-no-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus-nl.gif);}.x-tree-no-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus-nl.gif);}.x-tree-no-lines .x-tree-elbow-line{background:transparent;}.x-tree-arrows .x-tree-elbow{background:transparent;}.x-tree-arrows .x-tree-elbow-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}.x-tree-arrows .x-tree-elbow-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}.x-tree-arrows .x-tree-elbow-end{background:transparent;}.x-tree-arrows .x-tree-elbow-end-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}.x-tree-arrows .x-tree-elbow-end-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}.x-tree-arrows .x-tree-elbow-line{background:transparent;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{background-position:-32px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{background-position:-48px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{background-position:-32px 0;}.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{background-position:-48px 0;}.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{cursor:pointer;}.ext-ie ul.x-tree-node-ct{font-size:0;line-height:0;zoom:1;}.x-tree-node{color:#000;font:normal 100% arial,sans;white-space:nowrap;}.x-tree-node-el{line-height:18px;cursor:pointer;}.x-tree-node a,.x-dd-drag-ghost a{text-decoration:none;color:#000;-khtml-user-select:none;-moz-user-select:none;-kthml-user-focus:normal;-moz-user-focus:normal;-moz-outline:0 none;outline:0 none;}.x-tree-node a span,.x-dd-drag-ghost a span{text-decoration:none;color:#000;padding:1px 3px 1px 2px;}.x-tree-node .x-tree-node-disabled a span{color:gray!important;}.x-tree-node .x-tree-node-disabled .x-tree-node-icon{-moz-opacity:.5;opacity:.5;filter:alpha(opacity=50);}.x-tree-node .x-tree-node-inline-icon{background:transparent;}.x-tree-node a:hover,.x-dd-drag-ghost a:hover{text-decoration:none;}.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px dotted #36c;}.x-tree-node div.x-tree-drag-insert-above{border-top:1px dotted #36c;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{border-bottom:0 none;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{border-top:0 none;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{border-bottom:2px solid #36c;}.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top:2px solid #36c;}.x-tree-node .x-tree-drag-append a span{background:#ddd;border:1px dotted gray;}.x-tree-node .x-tree-node-over{background-color:#eee;}.x-tree-node .x-tree-selected{background-color:#d9e8fb;}.x-dd-drag-ghost .x-tree-node-indent,.x-dd-drag-ghost .x-tree-ec-icon{display:none!important;}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-add.gif);}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-over.gif);}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-under.gif);}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-between.gif);}.x-date-picker{border:1px solid #1b376c;border-top:0 none;background:#fff;position:relative;}.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:url(../js/ext/resources/images/default/shared/hd-sprite.gif) repeat-x 0 -83px;color:#FFF;font:bold 100% arial,sans;overflow:hidden;}.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{background:transparent!important;vertical-align:middle;}.x-date-middle .x-btn .x-btn-text{color:#fff;}.x-date-middle .x-btn-with-menu .x-btn-center em{background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow-light.gif) 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;}.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:.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{background-image:url(../js/ext/resources/images/default/shared/right-btn.gif);margin-right:2px;text-decoration:none!important;}.x-date-left a{background-image:url(../js/ext/resources/images/default/shared/left-btn.gif);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:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;text-align:right!important;border-bottom:1px solid #a3bad9;font:normal 100% arial,sans;color:#233d6d;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 #fff;text-align:right;padding:0;}.x-date-inner a{padding:2px 5px;display:block;font:normal 100% arial,sans;text-decoration:none;color:#000;text-align:right;zoom:1;}.x-date-inner .x-date-active{cursor:pointer;color:#000;}.x-date-inner .x-date-selected a{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;padding:1px 4px;}.x-date-inner .x-date-today a{border:1px solid #8B0000;padding:1px 4px;}.x-date-inner .x-date-selected span{font-weight:700;}.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a{color:#aaa;text-decoration:none!important;}.x-date-bottom{padding:4px;border-top:1px solid #a3bad9;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{text-decoration:none!important;color:#000;background:#ddecfe;}.x-date-inner .x-date-disabled a{cursor:default;background:#eee;color:#bbb;}.x-date-mmenu{background:#eee!important;}.x-date-mmenu .x-menu-item{font-size:10px;padding:1px 24px 1px 4px;white-space:nowrap;color:#000;}.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;background:#FFF;display:none;}.x-date-mp td{padding:2px;font:normal 100% arial,sans;}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;background:#083772;color:#FFF;border:1px solid;border-color:#36c #005 #005 #36c;padding:1px 3px;font:normal 100% arial,sans;cursor:pointer;}.x-date-mp-btns{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}.x-date-mp-btns td{border-top:1px solid #c5d2df;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;color:#15428b;}td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{color:#15428b;text-decoration:none;cursor:pointer;background:#ddecfe;}td.x-date-mp-sel a{padding:1px 3px;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;}.x-date-mp-ybtn a{overflow:hidden;width:15px;height:15px;cursor:pointer;background:transparent url(../js/ext/resources/images/default/panel/tool-sprites.gif) 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 #c5d2df;}.x-tip{position:absolute;top:0;left:0;visibility:hidden;z-index:20000;border:0 none;}.x-tip .x-tip-close{background-image:url(../js/ext/resources/images/default/qtip/close.gif);height:15px;float:right;width:15px;margin:0 0 2px 2px;cursor:pointer;display:none;}.x-tip .x-tip-tc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -62px;padding-top:3px;overflow:hidden;zoom:1;}.x-tip .x-tip-tl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 0;padding-left:6px;overflow:hidden;zoom:1;}.x-tip .x-tip-tr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right 0;padding-right:6px;overflow:hidden;zoom:1;}.x-tip .x-tip-bc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -121px;height:3px;overflow:hidden;}.x-tip .x-tip-bl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -59px;padding-left:6px;zoom:1;}.x-tip .x-tip-br{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right -59px;padding-right:6px;zoom:1;}.x-tip .x-tip-mc{border:0 none;font:normal 100% arial,sans;}.x-tip .x-tip-ml{background:#fff url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -124px;padding-left:6px;zoom:1;}.x-tip .x-tip-mr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) 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;}.x-tip .x-tip-header-text{font:bold 100% arial,sans;padding:0;margin:0 0 2px;color:#444;}.x-tip .x-tip-body{font:normal 100% arial,sans;margin:0!important;line-height:14px;color:#444;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:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -12px;padding-top:6px;}.x-form-invalid-tip .x-tip-tl{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-tr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-bc{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -18px;height:6px;}.x-form-invalid-tip .x-tip-bl{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat 0 -6px;}.x-form-invalid-tip .x-tip-br{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat right -6px;}.x-form-invalid-tip .x-tip-ml{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-mr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}.x-form-invalid-tip .x-tip-body{padding:2px;}.x-form-invalid-tip .x-tip-body{padding-left:24px;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 2px 2px;}.x-menu{border:1px solid #718bb7;z-index:15000;zoom:1;background:#f0f0f0 url(../js/ext/resources/images/default/menu/menu.gif) repeat-y;padding:2px;}.x-menu a{text-decoration:none!important;}.ext-ie .x-menu{zoom:1;overflow:hidden;}.x-menu-list{background:transparent;border:0 none;}.x-menu li{line-height:100%;}.x-menu li.x-menu-sep-li{font-size:1px;line-height:1px;}.x-menu-list-item{font:normal 100% arial,sans;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;display:block;padding:1px;}.x-menu-item-arrow{background:transparent url(../js/ext/resources/images/default/menu/menu-parent.gif) no-repeat right;}.x-menu-sep{display:block;font-size:1px;line-height:1px;margin:2px 3px;background-color:#e0e0e0;border-bottom:1px solid #fff;overflow:hidden;}.x-menu-focus{position:absolute;left:0;top:-5px;width:0;height:0;line-height:1px;}.x-menu a.x-menu-item{display:block;line-height:16px;padding:3px 21px 3px 3px;white-space:nowrap;text-decoration:none;color:#222;-moz-outline:0 none;outline:0 none;cursor:pointer;}.x-menu-item-active{background:#ebf3fd url(../js/ext/resources/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-item-icon{border:0 none;height:16px;padding:0;vertical-align:top;width:16px;margin:0 8px 0 0;background-position:center;}.x-menu-check-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/unchecked.gif) no-repeat center;}.x-menu-item-checked .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/menu/checked.gif);}.x-menu-group-item .x-menu-item-icon{background:transparent;}.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/group-checked.gif) no-repeat center;}.x-menu-plain{background:#fff!important;}.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 #a3bad9;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 #a3bae9!important;background:#DFE8F6;padding:0;}.x-box-tl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 0;zoom:1;}.x-box-tc{height:8px;background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 0;overflow:hidden;}.x-box-tr{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat right -8px;}.x-box-ml{background:transparent url(../js/ext/resources/images/default/box/l.gif) repeat-y 0;padding-left:4px;overflow:hidden;zoom:1;}.x-box-mc{background:#eee url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -16px;padding:4px 10px;font-family:"Myriad Pro","Myriad Web",Tahoma,Helvetica,Arial,sans-serif;color:#393939;font-size:100%;}.x-box-mc h3{font-size:14px;font-weight:700;margin:0 0 4px;zoom:1;}.x-box-mr{background:transparent url(../js/ext/resources/images/default/box/r.gif) repeat-y right;padding-right:4px;overflow:hidden;}.x-box-bl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 -16px;zoom:1;}.x-box-bc{background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -8px;height:8px;overflow:hidden;}.x-box-br{background:transparent url(../js/ext/resources/images/default/box/corners.gif) 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-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(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/images/default/box/l-blue.gif);}.x-box-blue .x-box-mr{background-image:url(../js/ext/resources/images/default/box/r-blue.gif);}#x-debug-browser .x-tree .x-tree-node a span{color:#222297;font-size:100%;padding-top:2px;font-family:monotype,"courier new",sans-serif;line-height:18px;}#x-debug-browser .x-tree a i{color:#FF4545;font-style:normal;}#x-debug-browser .x-tree a em{color:#999;}#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{background:#c3daf9;}#x-debug-browser .x-tool-toggle{background-position:0 -75px;}#x-debug-browser .x-tool-toggle-over{background-position:-15px -75px;}#x-debug-browser.x-panel-collapsed .x-tool-toggle{background-position:0 -60px;}#x-debug-browser.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -60px;}.x-combo-list{border:1px solid #98c0f4;background:#ddecfe;zoom:1;overflow:hidden;}.x-combo-list-inner{overflow:auto;background:#FFF;position:relative;zoom:1;overflow-x:hidden;}.x-combo-list-hd{font:bold 100% arial,sans;color:#15428b;background-image:url(../js/ext/resources/images/default/layout/panel-title-light-bg.gif);border-bottom:1px solid #98c0f4;padding:3px;}.x-resizable-pinned .x-combo-list-inner{border-bottom:1px solid #98c0f4;}.x-combo-list-item{font:normal 100% arial,sans;padding:2px;border:1px solid #fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.x-combo-list .x-combo-selected{border:1px dotted #a3bae9!important;background:#DFE8F6;cursor:pointer;}.x-combo-noedit{cursor:pointer;}.x-combo-list .x-toolbar{border-top:1px solid #98c0f4;border-bottom:0 none;}.x-combo-list-small .x-combo-list-item{font:normal 100% arial,sans;}.x-panel{border-style:solid;border-color:#99bbe8;border-width:0;}.x-panel-header{overflow:hidden;zoom:1;color:#15428b;font:bold 100% arial,sans;padding:5px 3px 4px 5px;border:1px solid #99bbe8;line-height:15px;background:transparent url(../js/ext/resources/images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;}.x-panel-body{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;background:#FFF;position:relative;}.x-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}.x-panel-tbar .x-toolbar{border:1px solid #99bbe8;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 #99bbe8;border-bottom:0 none;}.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-top:1px solid #99bbe8;}.x-panel-header{overflow:hidden;zoom:1;}.x-panel-tl .x-panel-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px;border:0 none;background:transparent;}.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 url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 0;overflow:hidden;}.ext-strict .ext-ie7 .x-panel-tc{overflow:visible;}.x-panel-tl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 0;padding-left:6px;zoom:1;border-bottom:1px solid #99bbe8;}.x-panel-tr{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right 0;zoom:1;padding-right:6px;}.x-panel-bc{background:transparent url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 bottom;zoom:1;}.x-panel-bc .x-panel-footer{zoom:1;}.x-panel-bl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 bottom;padding-left:6px;zoom:1;}.x-panel-br{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right bottom;padding-right:6px;zoom:1;}.x-panel-mc{border:0 none;padding:0;margin:0;font:normal 100% arial,sans;padding-top:6px;background:#dfe8f6;}.x-panel-mc .x-panel-body{background:transparent;border:0 none;}.x-panel-ml{background:#fff url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y 0 0;padding-left:6px;zoom:1;}.x-panel-mr{background:transparent url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y right 0;padding-right:6px;zoom:1;}.x-panel-bc .x-panel-footer{padding-bottom:6px;}.x-panel-nofooter .x-panel-bc{height:6px;font-size:0;line-height:0;}.x-panel-bwrap{overflow:hidden;zoom:1;}.x-panel-body{overflow:hidden;zoom:1;}.x-panel-collapsed .x-resizable-handle{display:none;}.ext-gecko .x-panel-animated div{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 url(../js/ext/resources/images/default/panel/tool-sprites.gif) 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{background:#cbddf3;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 #99bbe8;border-top:0 none;display:block;}.x-panel-ghost *{cursor:move!important;}.x-panel-dd-spacer{border:2px dashed #99bbe8;}.x-panel-btns-ct{padding:5px;}.x-panel-btns-ct .x-btn{float:right;clear:none;}.x-panel-btns-ct .x-panel-btns td{border:0;padding:0;}.x-panel-btns-ct .x-panel-btns-right table{float:right;clear:none;}.x-panel-btns-ct .x-panel-btns-left table{float:left;clear:none;}.x-panel-btns-ct .x-panel-btns-center{text-align:center;}.x-panel-btns-ct .x-panel-btns-center table{margin:0 auto;}.x-panel-btns-ct table td.x-panel-btn-td{padding:3px;}.x-panel-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}.x-panel-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}.x-panel-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}.x-panel-btns-ct .x-btn-over .x-btn-left{background-position:0 -63px;}.x-panel-btns-ct .x-btn-over .x-btn-right{background-position:0 -84px;}.x-panel-btns-ct .x-btn-over .x-btn-center{background-position:0 -105px;}.x-panel-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}.x-panel-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}.x-panel-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}.x-window{zoom:1;}.x-window .x-resizable-handle{opacity:0;-moz-opacity:0;filter:alpha(opacity=0);}.x-window-proxy{background:#C7DFFC;border:1px solid #99bbe8;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;}.x-window-tl .x-window-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px;}.x-window-header-text{cursor:pointer;}.x-window-tc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) repeat-x 0 0;overflow:hidden;zoom:1;}.x-window-tl{background:transparent url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 0;padding-left:6px;zoom:1;z-index:1;position:relative;}.x-window-tr{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right 0;padding-right:6px;}.x-window-bc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) 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 url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 bottom;padding-left:6px;zoom:1;}.x-window-br{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right bottom;padding-right:6px;zoom:1;}.x-window-mc{border:1px solid #99bbe8;padding:0;margin:0;font:normal 100% arial,sans;background:#dfe8f6;}.x-window-ml{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y 0 0;padding-left:6px;zoom:1;}.x-window-mr{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y right 0;padding-right:6px;zoom:1;}.x-panel-nofooter .x-window-bc{height:6px;}.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;background-color:#FFF;}.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 #99bbe8;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 #99bbe8;}.x-panel-collapsed .x-window-tl{border-bottom:1px solid #84a0c4;}.x-window-maximized-ct{overflow:hidden;}.x-window-maximized .x-resizable-handle{display:none;}.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:.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;}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{background:#CAD9EC;border-right:1px solid #DFE8F6;border-bottom:1px solid #DFE8F6;border-top:1px solid #a3bae9;border-left:1px solid #a3bae9;}.x-window-plain .x-window-body{border-left:1px solid #DFE8F6;border-top:1px solid #DFE8F6;border-bottom:1px solid #a3bae9;border-right:1px solid #a3bae9;background:transparent!important;}body.x-body-masked .x-window-plain .x-window-mc{background:#C7D6E9;}.x-html-editor-wrap{border:1px solid #a9bfd3;background:#FFF;}.x-html-editor-tb .x-btn-text{background:transparent url(../js/ext/resources/images/default/editor/tb-sprite.gif) no-repeat;}.x-html-editor-tb .x-edit-bold .x-btn-text{background-position:0 0;}.x-html-editor-tb .x-edit-italic .x-btn-text{background-position:-16px 0;}.x-html-editor-tb .x-edit-underline .x-btn-text{background-position:-32px 0;}.x-html-editor-tb .x-edit-forecolor .x-btn-text{background-position:-160px 0;}.x-html-editor-tb .x-edit-backcolor .x-btn-text{background-position:-176px 0;}.x-html-editor-tb .x-edit-justifyleft .x-btn-text{background-position:-112px 0;}.x-html-editor-tb .x-edit-justifycenter .x-btn-text{background-position:-128px 0;}.x-html-editor-tb .x-edit-justifyright .x-btn-text{background-position:-144px 0;}.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text{background-position:-80px 0;}.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text{background-position:-96px 0;}.x-html-editor-tb .x-edit-increasefontsize .x-btn-text{background-position:-48px 0;}.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text{background-position:-64px 0;}.x-html-editor-tb .x-edit-sourceedit .x-btn-text{background-position:-192px 0;}.x-html-editor-tb .x-edit-createlink .x-btn-text{background-position:-208px 0;}.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;border-bottom:1px solid #99bbe8;}.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #99bbe8;}.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 #99bbe8;}.x-tab-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}.x-border-layout-ct{background:#dfe8f6;}.x-border-panel{position:absolute;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{color:#222;padding-top:4px;padding-bottom:3px;border-top:0 none;font-weight:400;background:transparent url(../js/ext/resources/images/default/panel/light-hd.gif) repeat-x 0 -9px;}.x-layout-collapsed{position:absolute;left:-10000px;top:-10000px;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-layout-split{position:absolute;height:5px;width:5px;line-height:1px;font-size:1px;z-index:3;background-color:transparent;}.x-layout-split-h{background-image:url(../js/ext/resources/images/default/s.gif);background-position:left;}.x-layout-split-v{background-image:url(../js/ext/resources/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-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%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}.x-layout-split-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}.x-layout-split-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}.x-layout-split-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}.x-layout-cmini-west .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}.x-layout-cmini-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}.x-layout-cmini-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}.x-layout-cmini-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}.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;left:0;top:0;}.ext-ie input.x-abs-layout-item,.ext-ie textarea.x-abs-layout-item{margin:0;}.x-progress-wrap{border:1px solid #6593cf;overflow:hidden;}.x-progress-inner{height:18px;background:#e0e8f3 url(../js/ext/resources/images/default/qtip/bg.gif) repeat-x;position:relative;}.x-progress-bar{height:18px;float:left;width:0;background:#9CBFEE url(../js/ext/resources/images/default/progress/progress-bg.gif) repeat-x left center;border-top:1px solid #D1E4FD;border-bottom:1px solid #7FA9E4;border-right:1px solid #7FA9E4;}.x-progress-text{font-size:100%;font-weight:700;color:#fff;padding:1px 5px;overflow:hidden;position:absolute;left:0;text-align:center;}.x-progress-text-back{color:#396095;line-height:16px;}.ext-ie .x-progress-text-back{line-height:15px;}.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-text,.x-window-dlg .x-window-header-text{font-size:100%;}.x-window-dlg .ext-mb-input{margin-top:4px;width:95%;}.x-window-dlg .ext-mb-textarea{margin-top:4px;font:normal 100% arial,sans;}.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 url(../js/ext/resources/images/default/grid/loading.gif) 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 .ext-mb-info{background:transparent url(../js/ext/resources/images/default/window/icon-info.gif) no-repeat top left;}.x-window-dlg .ext-mb-warning{background:transparent url(../js/ext/resources/images/default/window/icon-warning.gif) no-repeat top left;}.x-window-dlg .ext-mb-question{background:transparent url(../js/ext/resources/images/default/window/icon-question.gif) no-repeat top left;}.x-window-dlg .ext-mb-error{background:transparent url(../js/ext/resources/images/default/window/icon-error.gif) no-repeat top left;}/*
- * Ext JS Library 2.0.2
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing(a)extjs.com
- *
- * http://extjs.com/license
- */.x-panel{border-style:solid;border-color:#d0d0d0;}.x-panel-header{color:#333;border:1px solid #d0d0d0;background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/panel/top-bottom.gif);}.x-panel-tl{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);border-color:#d0d0d0;}.x-panel-tr{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);}.x-panel-bc{background-image:url(../js/ext/resources/images/gray/panel/top-bottom.gif);}.x-panel-bl{background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);}.x-panel-br{background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/panel/left-right.gif);}.x-panel-mr{background-image:url(../js/ext/resources/images/gray/panel/left-right.gif);}/* Tools */.x-tool{background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/button/btn-sprite.gif);}.x-btn-right{background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);}.x-btn-center{background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);}/* Layout classes */.x-border-layout-ct{background:#f0f0f0;}.x-accordion-hd{background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-top-left{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-top-right{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-ft{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-ft-left{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-ft-right{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-bd-left{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}.x-tip .x-tip-bd-right{background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);}/* Toolbars */.x-toolbar{border-color:#d0d0d0;background:#f0f4f5 url(../js/ext/resources/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(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);}.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button{background-image:url(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);}.x-toolbar .x-btn-over .x-btn-left{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-over .x-btn-right{background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .x-btn-over .x-btn-center{background-image:url(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);}.x-toolbar .ytb-sep{background-image:url(../js/ext/resources/images/default/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(../js/ext/resources/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(../js/ext/resources/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:#AAA;}.x-tab-strip-top .x-tab-right{background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);}.x-tab-strip-top .x-tab-left{background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);}.x-tab-strip-top .x-tab-strip-inner{background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);}.x-tab-strip-bottom .x-tab-right{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif);}.x-tab-strip-bottom .x-tab-left{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif);}.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-right-bg.gif);}.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-left-bg.gif);}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close{background-image:url(../js/ext/resources/images/gray/tabs/tab-close.gif);}.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/tabs/scroll-left.gif);border-color:#aeaeae;}.x-tab-scroller-right{background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/window/top-bottom.png);}.x-window-tl{background-image:url(../js/ext/resources/images/gray/window/left-corners.png);}.x-window-tr{background-image:url(../js/ext/resources/images/gray/window/right-corners.png);}.x-window-bc{background-image:url(../js/ext/resources/images/gray/window/top-bottom.png);}.x-window-bl{background-image:url(../js/ext/resources/images/gray/window/left-corners.png);}.x-window-br{background-image:url(../js/ext/resources/images/gray/window/right-corners.png);}.x-window-mc{border:1px solid #d0d0d0;background:#e8e8e8;}.x-window-ml{background-image:url(../js/ext/resources/images/gray/window/left-right.png);}.x-window-mr{background-image:url(../js/ext/resources/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;}.kunebody{background-color:#FFF;color:#000;font-family:arial, sans;margin:5px;}#kuneinitialcurtain{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#FFF;z-index:9999;}/* Global styles */.gwt-HorizontalSplitPanel .hsplitter{cursor:e-resize;width:6px;}.gwt-DialogBox{border:8px solid #C3D9FF;border:2px outset;background-color:#FFF;}.gwt-DialogBox .Caption{background-color:#C3D9FF;font-size:85%;font-weight:700;padding:3px;margin:2px;cursor:default;}.gwt-MenuBar{background-color:#F2F2F2;border:1px solid #999;vertical-align:middle;padding:5px 0;}.gwt-MenuBar .gwt-MenuItem{cursor:pointer;padding:1px 10px;white-space:nowrap;}.gwt-MenuBar .gwt-MenuItem img{vertical-align:middle;margin-right:3px;}.gwt-MenuBar .gwt-MenuItem{background-color:#F2F2F2;}.gwt-MenuBar .gwt-MenuItem-selected{background-color:#FFB958;}.kune-MenuBar .gwt-MenuItem{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;cursor:hand;white-space:nowrap;padding:0 10px;}.kune-MenuBar .gwt-MenuItem-selected{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#963;}.kune-expandHoriz{width:100%;}.kune-expandVert{height:100%;}.kune-floatleft{float:left;}.kune-floatright{float:right;}/* Deprecated */.kune-Default-Form{margin:10px;}.kune-valignmiddle{vertical-align:middle;}fieldset{border:1px solid #B5B8C8;/* margin-bottom:10px; */padding:10px 10px 5px;}legend{color:#15428B;font-size:85%;font-size-adjust:none;font-style:normal;font-variant:normal;font-weight:700;line-height:normal;}.gwt-RadioButton input{margin:0 3px;vertical-align:middle;}.gwt-RadioButton label{margin:0 3px;vertical-align:middle;}.kune-pointer{cursor:pointer;}.kuneLabelPre{white-space:pre!important;}/* Buttons */.kune-CustomPushButton-space{margin-top:3px;margin-bottom:3px;}.kune-CustomPushButton{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;white-space:nowrap;padding:0 12px;}.kune-CustomPushButton-up{color:#161616;}.kune-CustomPushButton-down{color:#000;}.kune-CustomPushButton-up-hovering{color:#161616;background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;}.kune-CustomPushButton-down-hovering{color:#000;}.kune-CustomPushButton-up-disabled{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#E0E0E0;cursor:default;}.kune-CustomPushButton-down-disabled{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#E0E0E0;cursor:default;}.kune-Button-Large-lrSpace{margin-left:12px;margin-right:12px;}.kune-Button-Large-rSpace{margin-right:12px;}.kune-Button-Large-lSpace{margin-left:12px;}.kune-Button-Large-tbSpace{margin-top:12px;margin-bottom:12px;}.kune-Button-Small-lrSpace{margin-left:10px;margin-right:10px;}.kune-Button-Small-rSpace{margin-right:10px;}.kune-Button-Small-lSpace{margin-left:10px;}.kune-Button-Small-tbSpace{margin-top:10px;margin-bottom:10px;}.kune-Button-Mini-lSpace{margin-left:8px;}.kune-Button-Mini-lrSpace{margin-left:8px;margin-right:8px;}.kune-Button-Mini-rSpace{margin-right:8px;}.kune-Button-Mini-tbSpace{margin-top:8px;margin-bottom:8px;}.kune-IconHyperlink{}.kune-IconHyperlink a:link{/* text-decoration: underline; */color:green;}.kune-IconHyperlink a:hover{text-decoration:underline;}.kune-IconHyperlink a:visited{color:olive;}.kune-IconHyperlink img{margin-right:4px;vertical-align:middle;}.kune-IconLabel{}.kune-IconLabel img{margin-right:4px;vertical-align:middle;}.kune-link{text-decoration:underline;color:green;cursor:pointer;}/* DropDowns */.kune-DropDownOuter{background-color:green;}.kune-DropDownInner{margin:0 3px 1px;background:green;background-color:#FFF;padding:3px;}.kune-DropDownLabel{color:#FFF;cursor:pointer;}.kune-DropDownLabel .gwt-Label{margin:0 5px 0 0;width:100%;}.kune-DropDownLabel img{margin:0 3px 0 1px;}.kune-IconLabel{color:green;}.kune-IconLabel img{margin-right:4px;vertical-align:middle;}/* Used in multi chat panel status change */.x-menu-item img{margin-right:4px;vertical-align:middle;}/* Margins */.kune-Margin-40-trbl{margin:40px;}.kune-Margin-40-lr{margin-left:40px;margin-right:40px;}.kune-Margin-40-tl{margin-top:40px;margin-left:40px;}.kune-Margin-40-tb{margin-top:40px;margin-bottom:40px;}.kune-Margin-40-t{margin-top:40px;}.kune-Margin-40-r{margin-right:40px;}.kune-Margin-40-l{margin-left:40px;}.kune-Margin-20-trbl{margin:20px;}.kune-Margin-20-lr{margin-left:20px;margin-right:20px;}.kune-Margin-20-tl{margin-top:20px;margin-left:20px;}.kune-Margin-20-tb{margin-top:20px;margin-bottom:20px;}.kune-Margin-20-t{margin-top:20px;}.kune-Margin-20-r{margin-right:20px;}.kune-Margin-20-l{margin-left:20px;}.kune-Margin-Large-trbl{margin:10px;}.kune-Margin-Large-lr{margin-left:10px;margin-right:10px;}.kune-Margin-Large-tl{margin-top:10px;margin-left:10px;}.kune-Margin-Large-tb{margin-top:10px;margin-bottom:10px;}.kune-Margin-Large-t{margin-top:10px;}.kune-Margin-Large-r{margin-right:10px;}.kune-Margin-Large-l{margin-left:10px;}.kune-Margin-Medium-trbl{margin:5px;}.kune-Margin-Medium-lr{margin-left:5px;margin-right:5px;}.kune-Margin-Medium-tl{margin-top:5px;margin-left:5px;}.kune-Margin-Medium-tb{margin-top:5px;margin-bottom:5px;}.kune-Margin-Medium-t{margin-top:5px;}.kune-Margin-Medium-r{margin-right:5px;}.kune-Margin-Medium-b{margin-bottom:5px;}.kune-Margin-Medium-l{margin-left:5px;}.kune-Margin-Small-trbl{margin:3px;}.kune-Margin-Small-lr{margin-left:3px;margin-right:3px;}.kune-Margin-Small-tl{margin-top:3px;margin-left:3px;}.kune-Margin-Small-tb{margin-top:3px;margin-bottom:3px;}.kune-Margin-Small-t{margin-top:3px;}.kune-Margin-Small-l{margin-left:3px;}.kune-Margin-Small-r{margin-right:3px;}.kune-Margin-Small-b{margin-bottom:3px;}.kune-Margin-Mini-trbl{margin:1px;}.kune-Margin-Mini-lr{margin-left:1px;margin-right:1px;}.kune-Margin-Mini-tl{margin-top:1px;margin-left:1px;}.kune-Margin-Mini-tb{margin-top:1px;margin-bottom:1px;}.kune-Margin-Mini-t{margin-top:1px;}.kune-Margin-Mini-r{margin-right:1px;}.kune-Margin-Mini-b{margin-bottom:1px;}.kune-Margin-Mini-l{margin-left:1px;}/* Fonts
-see: http://developer.yahoo.com/yui/fonts/ */.kune-ft10px{font-size:77%;}.kune-ft11px{font-size:85%;}.kune-ft12px{font-size:93%;}.kune-ft13px{font-size:100%;}.kune-ft14px{font-size:108%;}.kune-ft15px{font-size:116%;}.kune-ft16px{font-size:123.099998%;}.kune-ft17px{font-size:131%;}.kune-ft18px{font-size:138.5%;}.kune-ft19px{font-size:146.5%;}.kune-ft20px{font-size:153.899994%;}.kune-ft21px{font-size:161.600006%;}.kune-ft22px{font-size:167%;}.kune-ft23px{font-size:174%;}.kune-ft24px{font-size:182%;}.kune-ft25px{font-size:189%;}.kune-ft26px{font-size:197%;}/* Sitebar */.kune-SiteBarPanel .kune-IconHyperlink{white-space:nowrap;}.kune-SiteBarPanel .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.kune-SiteBarPanel .kune-IconHyperlink a:hover{text-decoration:underline;}.kune-SiteBarPanel .kune-IconHyperlink a:visited{color:#B3B3B3;}.kune-SiteBarPanel{margin-right:10px;height:16px;}.kune-SiteBarPanel .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:3px;color:#B3B3B3;}.kune-SiteBarPanel .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.kune-SiteBarPanel .gwt-PushButton{cursor:pointer;}.kune-SiteBarPanel-Separator{color:#E4A374;margin:0 5px;}.kune-SiteBarPanel-SpaceSeparator{width:10px;}.kune-SiteMessagePanel{color:#250;position:absolute;z-index:10000;vertical-align:middle;}.kune-SiteMessagePanel .gwt-HTML{margin:15px 5px 15px 2px;}.kune-SiteMessagePanel .gwt-Image{margin:5px;}.kune-SiteMessagePanel-error{background-color:#FFB380;border:1px solid #F06;}.kune-SiteMessagePanel-veryimp{background-color:#FFD4AA;border:1px solid #F59;}.kune-SiteMessagePanel-imp{background-color:#FFE6D5;border:1px solid #DE87AA;}.kune-SiteMessagePanel-info{background-color:#E5FF80;border:1px solid #87DE87;}/* Workspace styles */.kune-WorkspacePanel{width:100%;background-color:#FFF;}.kune-WokspacePanel .Tab{}.kune-WorkspacePanel .GeneralHP{}.kune-WorkspacePanel .ContextPanel{width:100%;border-right:3px solid #DD8A3D;}.kune-GroupSummaryPanel{margin:5px 0 0 5px;width:100%;}.kune-GroupToolsBar{width:150px;}.kune-GroupToolsBar-itemSelected{margin-bottom:5px;}.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a{color:#FFF;padding:0 9px;text-decoration:none;}.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a:hover{text-decoration:none;}.kune-GroupToolsBar-itemNotSelected{margin-bottom:5px;}.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a{color:green;padding:0 9px;text-decoration:none;}.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a:hover{text-decoration:none;}/* Content titles */.kune-ContentToolBarPanel{background-color:#F2F2F2;padding:2px;height:24px;vertical-align:middle;}.kune-ContentBottomBar{vertical-align:middle;height:24px;}.kune-ContentBottomBar .gwt-Image{margin-left:5px;cursor:pointer;float:left;}.kune-ContentBottomBar .gwt-Label a{}/* Main Content & Context */.kune-WorkspacePanel-Content{background-color:#FCFCFC;width:100%;height:100%;}.kune-WorkspacePanel-Content .main-content{margin:7px 5px 5px 10px;}.kune-WorkspacePanel-Context{background-color:#CFA;width:100%;height:100%;}.kune-NavigationBar{width:100%;}.kune-NavigationBar .topBar{background-color:#ececec;background:#ececec;border-bottom:1px solid #e3dbdb;vertical-align:middle;}.kune-NavigationBar .topBar .gwt-PushButton{margin:1px 3px 1px 0;}.kune-NavigationBar .topBar .gwt-Label{vertical-align:middle;}.kune-NavigationBar .kune-topBar-iconBar{margin:2px 0 2px 5px;}.kune-NavigationBar .kune-ContextItemsPanel-LabelLink{/* text-decoration: underline; */color:green;cursor:pointer;margin-left:3px;}/*
+*/
+body {font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:99%;}
+
+
+/*
+ * Ext JS Library 2.0.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing(a)extjs.com
+ *
+ * http://extjs.com/license
+ */
+
+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:'';}
+
+.ext-el-mask{z-index:20000;position:absolute;top:0;left:0;-moz-opacity:0.5;opacity:.50;filter:alpha(opacity=50);background-color:#CCC;width:100%;height:100%;zoom:1;}
+.ext-el-mask-msg{z-index:20001;position:absolute;top:0;left:0;border:1px solid #6593cf;background:#c3daf9 url(../js/ext/resources/images/default/box/tb-blue.gif) repeat-x 0 -16px;padding:2px;}
+.ext-el-mask-msg div{padding:5px 10px 5px 10px;background:#eee;border:1px solid #a3bad9;color:#222;font:normal 100% arial,sans;cursor:wait;}
+.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:#fbfbfb url( '../js/ext/resources/images/default/grid/loading.gif' ) no-repeat 5px 5px;line-height:16px;}
+.x-hidden,.x-hide-offsets{position:absolute;left:-10000px;top:-10000px;visibility:hidden;}
+.x-hide-display{display:none!important;}
+.x-hide-visibility{visibility:hidden!important;}
+.x-masked{overflow:hidden!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;}
+.x-repaint{zoom:1;background-color:transparent;-moz-outline:none;}
+.x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}
+.x-item-disabled *{color:gray!important;cursor:default!important;}
+.x-splitbar-proxy{position:absolute;visibility:hidden;z-index:20001;background:#aaa;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;}
+.x-color-palette a{border:1px solid #fff;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer;}
+.x-color-palette a:hover,.x-color-palette a.x-color-palette-sel{border:1px solid #8BB8F3;background:#deecfd;}
+.x-color-palette em{display:block;border:1px solid #ACA899;}
+.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;background:#777;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 url( ../js/ext/resources/images/default/shadow-c.png );}
+.x-shadow .xst,.x-shadow .xsb{height:6px;overflow:hidden;width:100%;}
+.x-shadow .xsml{background:transparent url( ../js/ext/resources/images/default/shadow-lr.png ) repeat-y 0 0;}
+.x-shadow .xsmr{background:transparent url( ../js/ext/resources/images/default/shadow-lr.png ) repeat-y -6px 0;}
+.x-shadow .xstl{background:transparent url( ../js/ext/resources/images/default/shadow.png ) no-repeat 0 0;}
+.x-shadow .xstc{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -30px;}
+.x-shadow .xstr{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -18px;}
+.x-shadow .xsbl{background:transparent url( ../js/ext/resources/images/default/shadow.png ) no-repeat 0 -12px;}
+.x-shadow .xsbc{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -36px;}
+.x-shadow .xsbr{background:transparent url( ../js/ext/resources/images/default/shadow.png ) repeat-x 0 -6px;}
+.loading-indicator{font-size:100%;background-image:url(../js/ext/resources/images/default/grid/loading.gif);background-repeat:no-repeat;background-position: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(../js/ext/resources/images/default/s.gif);z-index:20000;}
+.x-clear{clear:both;height:0;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);background-color:#CCC;width:0;height:0;zoom:1;}
+
+.x-tab-panel{overflow:hidden;}
+.x-tab-panel-header,.x-tab-panel-footer{background:#deecfd;border:1px solid #8db2e3;overflow:hidden;zoom:1;}
+.x-tab-panel-header{border:1px solid #8db2e3;padding-bottom:2px;}
+.x-tab-panel-footer{border:1px solid #8db2e3;padding-top:2px;}
+.x-tab-strip-wrap{width:100%;overflow:hidden;position:relative;zoom:1;}
+ul.x-tab-strip{display:block;width:5000px;zoom:1;}
+ul.x-tab-strip-top{padding-top:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom;border-bottom:1px solid #8db2e3;}
+ul.x-tab-strip-bottom{padding-bottom:1px;background:url(../js/ext/resources/images/default/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top;border-top:1px solid #8db2e3;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{border:1px solid #8db2e3;border-top:0 none;height:2px;background:#deecfd;font-size:1px;line-height:1px;}
+.ext-border-box .x-tab-panel-header-plain .x-tab-strip-spacer{height:3px;}
+ul.x-tab-strip li{float:left;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{font:normal 100% arial,sans;color:#416aa3;white-space:nowrap;cursor:pointer;padding:4px 0;}
+.x-tab-strip .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-over span.x-tab-strip-text{color:#15428b;}
+.x-tab-strip-active{cursor:default;}
+.x-tab-strip-active span.x-tab-strip-text{cursor:default;color:#15428b;font-weight:bold;}
+.x-tab-strip-disabled .x-tabs-text{cursor:default;color:#aaa;}
+.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 url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat 0 -51px;padding-left:10px;}
+.x-tab-strip-top .x-tab-left{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) no-repeat right -351px;padding-right:10px;}
+.x-tab-strip-top .x-tab-strip-inner{background:transparent url(../js/ext/resources/images/default/tabs/tabs-sprite.gif) 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:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;}
+.x-tab-strip-bottom .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;}
+.x-tab-strip-bottom .x-tab-strip-active .x-tab-right{background:url(../js/ext/resources/images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;}
+.x-tab-strip-bottom .x-tab-strip-active .x-tab-left{background:url(../js/ext/resources/images/default/tabs/tab-btm-left-bg.gif) 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{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);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{background-image:url(../js/ext/resources/images/default/tabs/tab-close.gif);opacity:1;-moz-opacity:1;}
+.x-tab-panel-body{border:1px solid #8db2e3;background:#fff;}
+.x-tab-panel-body-top{border-top:0 none;}
+.x-tab-panel-body-bottom{border-bottom:0 none;}
+.x-tab-scroller-left{background:transparent url(../js/ext/resources/images/default/tabs/scroll-left.gif) no-repeat -18px 0;border-bottom:1px solid #8db2e3;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 url(../js/ext/resources/images/default/tabs/scroll-right.gif) no-repeat 0 0;border-bottom:1px solid #8db2e3;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 .x-tab-strip-wrap{margin-left:18px;margin-right:18px;}
+.x-tab-scrolling{position:relative;}
+.x-tab-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
+.x-tab-panel-tbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
+.x-border-layout-ct .x-tab-panel{background:white;}
+
+ .x-form-field{margin:0;font:normal 100% arial,sans;}
+.x-form-text,textarea.x-form-field{padding:1px 3px;background:#fff url(../js/ext/resources/images/default/form/text-bg.gif) repeat-x 0 0;border:1px solid #B5B8C8;}
+textarea.x-form-field{padding:2px 3px;}
+.x-form-text{height:22px;line-height:18px;vertical-align:middle;}
+.ext-ie .x-form-text{margin:-1px 0;height:22px;line-height:18px;}
+.ext-ie textarea.x-form-field{margin:-1px 0;}
+.ext-strict .x-form-text{height:18px;}
+.ext-safari .x-form-text{height:20px;padding:0 3px;}
+.ext-safari.ext-mac textarea.x-form-field{margin-bottom:-2px;}
+.ext-gecko .x-form-text{padding-top:2px;padding-bottom:0;}
+textarea{resize:none;}
+.x-form-select-one{height:20px;line-height:18px;vertical-align:middle;background-color:#fff;border:1px solid #B5B8C8;}
+.x-form-field-wrap{position:relative;zoom:1;white-space:nowrap;}
+.x-editor .x-form-check-wrap{background:#fff;}
+.x-form-field-wrap .x-form-trigger{width:17px;height:21px;border:0;background:transparent url(../js/ext/resources/images/default/form/trigger.gif) no-repeat 0 0;cursor:pointer;border-bottom:1px solid #B5B8C8;position:absolute;top:0;}
+.ext-safari .x-form-field-wrap .x-form-trigger{height:21px;}
+.x-form-field-wrap .x-form-date-trigger{background-image:url(../js/ext/resources/images/default/form/date-trigger.gif);cursor:pointer;}
+.x-form-field-wrap .x-form-clear-trigger{background-image:url(../js/ext/resources/images/default/form/clear-trigger.gif);cursor:pointer;}
+.x-form-field-wrap .x-form-search-trigger{background-image:url(../js/ext/resources/images/default/form/search-trigger.gif);cursor:pointer;}
+.ext-safari .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 .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 #7eadd9;}
+.x-item-disabled .x-form-trigger-over{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}
+.x-item-disabled .x-form-trigger-click{background-position:0 0!important;border-bottom:1px solid #B5B8C8;}
+.x-form-focus,textarea.x-form-focus{border:1px solid #7eadd9;}
+.x-form-invalid,textarea.x-form-invalid{background:#fff url(../js/ext/resources/images/default/grid/invalid_line.gif) repeat-x bottom;border:1px solid #dd7870;}
+.ext-safari .x-form-invalid{background-color:#fee;border:1px solid #ff7870;}
+.x-editor{visibility:hidden;padding:0;margin:0;}
+.x-form-check-wrap{line-height:18px;}
+.ext-ie .x-form-check-wrap input{width:15px;height:15px;}
+.x-editor .x-form-check-wrap{padding:3px;}
+.x-editor .x-form-checkbox{height:13px;}
+.x-form-grow-sizer{font:normal 100% arial,sans;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{font:normal 100% arial,sans;display:block;margin-bottom:4px;}
+.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{color:#e00;padding:2px;padding-left:18px;font:normal 100% arial,sans;background:transparent url(../js/ext/resources/images/default/shared/warning.gif) no-repeat 0 2px;line-height:16px;width:200px;}
+.x-form-label-right label{text-align:right;}
+.x-form-label-top .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-form-empty-field{color:gray;}
+.x-small-editor .x-form-field{font:normal 100% arial,sans;}
+.x-small-editor .x-form-text{height:20px;line-height:16px;vertical-align:middle;}
+.ext-ie .x-small-editor .x-form-text{margin-top:-1px!important;margin-bottom:-1px!important;height:20px!important;line-height:16px!important;}
+.ext-strict .x-small-editor .x-form-text{height:16px!important;}
+.ext-safari .x-small-editor .x-form-field{font:normal 100% arial,sans;}
+.ext-ie .x-small-editor .x-form-text{height:20px;line-height:16px;}
+.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;height:0;overflow:hidden;line-height:0;font-size:0;}
+.x-form-clear-left{clear:left;height:0;overflow:hidden;line-height:0;font-size: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;visibility:hidden;position:absolute;left:0;top:0;display:block;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 0 2px;}
+.x-fieldset{border:1px solid #B5B8C8;padding:10px;margin-bottom:10px;}
+.x-fieldset legend{font:bold 100% arial,sans;color:#15428b;}
+.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 0 0 0!important;}
+fieldset.x-panel-collapsed .x-fieldset-bwrap{visibility:hidden;position:absolute;left:-1000px;top:-1000px;}
+.ext-ie .x-fieldset-bwrap{zoom:1;}
+.ext-ie td .x-form-text{position:relative;top:-1px;}
+.x-fieldset-noborder{border:0 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:-5px;}
+.ext-gecko .x-window-body .x-form-item{-moz-outline:none;overflow:auto;}
+.ext-gecko .x-form-item{-moz-outline:none;}
+.x-hide-label label.x-form-item-label{display:none;}
+.x-hide-label .x-form-element{padding-left:0!important;}
+.x-fieldset{overflow:hidden;}
+.x-fieldset-bwrap{overflow:hidden;zoom:1;}
+.x-fieldset-body{overflow:hidden;}
+
+.x-btn{font:normal 100% arial,sans;cursor:pointer;white-space:nowrap;}
+.x-btn button{border:0 none;background:transparent;padding-left:3px;padding-right:3px;cursor:pointer;margin:0;overflow:visible;width:auto;-moz-outline:0 none;outline:0 none;}
+* html .ext-ie .x-btn button{width:1px;}
+.ext-gecko .x-btn button{padding-left:0;padding-right:0;}
+.ext-ie .x-btn button{padding-top:2px;}
+.x-btn-icon .x-btn-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 .x-btn-center{padding:1px;}
+.x-btn em{font-style:normal;font-weight:normal;}
+.x-btn-text-icon .x-btn-center .x-btn-text{background-position:0 2px;background-repeat:no-repeat;padding-left:18px;padding-top:3px;padding-bottom:2px;padding-right:0;}
+.x-btn-left,.x-btn-right{font-size:1px;line-height:1px;}
+.x-btn-left{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 0;}
+.x-btn-right{width:3px;height:21px;background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -21px;}
+.x-btn-left i,.x-btn-right i{display:block;width:3px;overflow:hidden;font-size:1px;line-height:1px;}
+.x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -42px;vertical-align:middle;text-align:center;padding:0 5px;cursor:pointer;white-space:nowrap;}
+.x-btn-over .x-btn-left{background-position:0 -63px;}
+.x-btn-over .x-btn-right{background-position:0 -84px;}
+.x-btn-over .x-btn-center{background-position:0 -105px;}
+.x-btn-click .x-btn-center,.x-btn-menu-active .x-btn-center{background-position:0 -126px;}
+.x-btn-disabled *{color:gray!important;cursor:default!important;}
+.x-btn-menu-text-wrap .x-btn-center{padding:0 3px;}
+.ext-gecko .x-btn-menu-text-wrap .x-btn-center{padding:0 1px;}
+.x-btn-menu-arrow-wrap .x-btn-center{padding:0;}
+.x-btn-menu-arrow-wrap .x-btn-center button{width:12px!important;height:21px;padding:0!important;display:block;background:transparent url(../js/ext/resources/images/default/button/btn-arrow.gif) no-repeat left 3px;}
+.x-btn-with-menu .x-btn-center{padding-right:2px!important;}
+.x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 0;padding-right:10px;}
+.x-btn-text-icon .x-btn-with-menu .x-btn-center em{display:block;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat right 3px;padding-right:10px;}
+.x-btn-pressed .x-btn-left{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -63px;}
+.x-btn-pressed .x-btn-right{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) no-repeat 0 -84px;}
+.x-btn-pressed .x-btn-center{background:url(../js/ext/resources/images/default/button/btn-sprite.gif) repeat-x 0 -126px;}
+
+.x-toolbar{border-color:#a9bfd3;border-style:solid;border-width:0 0 1px 0;display:block;padding:2px;background:#d0def0 url(../js/ext/resources/images/default/toolbar/bg.gif) repeat-x top left;position:relative;zoom:1;}
+.x-toolbar .x-item-disabled .x-btn-icon{opacity:.35;-moz-opacity:.35;filter:alpha(opacity=35);}
+.x-toolbar td{vertical-align:middle;}
+.mso .x-toolbar,.x-grid-mso .x-toolbar{border:0 none;background:url(../js/ext/resources/images/default/grid/mso-hd.gif);}
+.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial,sans;}
+.x-toolbar .x-item-disabled{color:gray;cursor:default;opacity:.6;-moz-opacity:.6;filter:alpha(opacity=60);}
+.x-toolbar .x-item-disabled *{color:gray;cursor:default;}
+.x-toolbar .x-btn-left{background:none;}
+.x-toolbar .x-btn-right{background:none;}
+.x-toolbar .x-btn-center{background:none;padding:0;}
+.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:2px;}
+.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{padding-right:0;}
+.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{padding:0 2px;}
+.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}
+.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button{width:12px;background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;}
+.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button{background-position:0 -47px;}
+.x-toolbar .x-btn-over .x-btn-left{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;}
+.x-toolbar .x-btn-over .x-btn-right{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;}
+.x-toolbar .x-btn-over .x-btn-center{background:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;}
+.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:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;}
+.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:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;}
+.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:url(../js/ext/resources/images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;}
+.x-toolbar .x-btn-with-menu .x-btn-center em{padding-right:8px;}
+.x-toolbar .ytb-text{padding:2px;}
+.x-toolbar .ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-blue-split.gif);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 .ytb-spacer{width:2px;}
+.x-tbar-page-number{width:24px;height:14px;}
+.x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first.gif)!important;}
+.x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/done.gif)!important;}
+.x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last.gif)!important;}
+.x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next.gif)!important;}
+.x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev.gif)!important;}
+.x-item-disabled .x-tbar-loading{background-image:url(../js/ext/resources/images/default/grid/loading.gif)!important;}
+.x-item-disabled .x-tbar-page-first{background-image:url(../js/ext/resources/images/default/grid/page-first-disabled.gif)!important;}
+.x-item-disabled .x-tbar-page-last{background-image:url(../js/ext/resources/images/default/grid/page-last-disabled.gif)!important;}
+.x-item-disabled .x-tbar-page-next{background-image:url(../js/ext/resources/images/default/grid/page-next-disabled.gif)!important;}
+.x-item-disabled .x-tbar-page-prev{background-image:url(../js/ext/resources/images/default/grid/page-prev-disabled.gif)!important;}
+.x-paging-info{position:absolute;top:5px;right:8px;color:#444;}
+
+.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;background:white;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{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}
+.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-west{background:url(../js/ext/resources/images/default/sizer/e-handle.gif);background-position:left;}
+.x-resizable-over .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-south{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}
+.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-north{background:url(../js/ext/resources/images/default/sizer/s-handle.gif);background-position:top;}
+.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background:url(../js/ext/resources/images/default/sizer/se-handle.gif);background-position:top left;}
+.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background:url(../js/ext/resources/images/default/sizer/nw-handle.gif);background-position:bottom right;}
+.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background:url(../js/ext/resources/images/default/sizer/ne-handle.gif);background-position:bottom left;}
+.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background:url(../js/ext/resources/images/default/sizer/sw-handle.gif);background-position:top right;}
+.x-resizable-proxy{border:1px dashed #3b5a82;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;background:white;z-index:200000;-moz-opacity:0;opacity:0;filter:alpha(opacity=0);}
+
+ .x-grid3{position:relative;overflow:hidden;background-color:#fff;}
+.x-grid-panel .x-panel-body{overflow:hidden!important;}
+.x-grid-panel .x-panel-mc .x-panel-body{border:1px solid #99bbe8;}
+.ext-ie .x-grid3 table,.ext-safari .x-grid3 table{table-layout:fixed;}
+.x-grid3-viewport{overflow:hidden;}
+.x-grid3-hd-row td,.x-grid3-row td,.x-grid3-summary-row td{font:normal 100% arial,sans;-moz-outline:none;-moz-user-focus:normal;}
+.x-grid3-row td,.x-grid3-summary-row td{line-height:13px;vertical-align:top;padding-left:1px;padding-right:1px;-moz-user-select:none;}
+.x-grid3-hd-row td{line-height:15px;vertical-align:middle;border-left:1px solid #eee;border-right:1px solid #d0d0d0;}
+.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;}
+.x-grid3-row-body{white-space:normal;}
+.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:#fff url(../js/ext/resources/images/default/shared/loading-balls.gif) no-repeat center center;}
+.x-grid-page{overflow:hidden;}
+.x-grid3-row{cursor:default;border:1px solid #ededed;border-top-color:#fff;width:100%;}
+.x-grid3-row-alt{background-color:#fafafa;}
+.x-grid3-row-over{border:1px solid #ddd;background:#efefef url(../js/ext/resources/images/default/grid/row-over.gif) repeat-x left top;}
+.x-grid3-resize-proxy{width:1px;left:0;background-color:#777;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;background-color:#777;position:absolute;top:0;height:100px;overflow:hidden;visibility:hidden;border:0 none;z-index:7;}
+.x-grid3-focus{position:absolute;top:0;-moz-outline:0 none;outline:0 none;-moz-user-select:normal;-khtml-user-select:normal;}
+.x-grid3-header{background:#f9f9f9 url(../js/ext/resources/images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;cursor:default;zoom:1;padding:1px 0 0 0;}
+.x-grid3-header-pop{border-left:1px solid #d0d0d0;float:right;clear:none;}
+.x-grid3-header-pop-inner{border-left:1px solid #eee;width:14px;height:19px;background:transparent url(../js/ext/resources/images/default/grid/hd-pop.gif) 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;width:10000px;}
+td.x-grid3-hd-over,td.sort-desc,td.sort-asc,td.x-grid3-hd-menu-open{border-left:1px solid #aaccf6;border-right:1px solid #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:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) 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{background-image:url(../js/ext/resources/images/default/grid/sort_asc.gif);display:inline;}
+.sort-desc .x-grid3-sort-icon{background-image:url(../js/ext/resources/images/default/grid/sort_desc.gif);display:inline;}
+.ext-strict .ext-ie .x-grid3-header-inner{position:relative;}
+.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;-moz-user-select:none;-khtml-user-select:none;color:black;}
+.x-grid3-split{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);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-grid3-hd-text{color:#15428b;}
+.x-dd-drag-proxy .x-grid3-hd-inner{background:#ebf3fd url(../js/ext/resources/images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;width:120px;padding:3px;border:1px solid #aaccf6;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;}
+.col-move-top{background:transparent url(../js/ext/resources/images/default/grid/col-move-top.gif) no-repeat left top;}
+.col-move-bottom{background:transparent url(../js/ext/resources/images/default/grid/col-move-bottom.gif) no-repeat left top;}
+.x-grid3-row-selected{background:#DFE8F6!important;border:1px dotted #a3bae9;}
+.x-grid3-cell-selected{background-color:#B8CFEE!important;color:black;}
+.x-grid3-cell-selected span{color:black!important;}
+.x-grid3-cell-selected .x-grid3-cell-text{color:black;}
+.x-grid3-locked td.x-grid3-row-marker,.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{background:#ebeadb url(../js/ext/resources/images/default/grid/grid-hrow.gif) repeat-x 0 bottom!important;vertical-align:middle!important;color:black;padding:0;border-top:1px solid white;border-bottom:none!important;border-right:1px solid #6fa0df!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;color:#15428b!important;text-align:center;}
+.x-grid3-dirty-cell{background:transparent url(../js/ext/resources/images/default/grid/dirty.gif) no-repeat 0 0;}
+.x-grid3-topbar,.x-grid3-bottombar{font:normal 100% arial,sans;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 #a9bfd3;}
+.x-props-grid .x-grid3-cell{padding:1px;}
+.x-props-grid .x-grid3-td-name .x-grid3-cell-inner{background:transparent url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y -16px!important;padding-left:12px;color:black!important;}
+.x-props-grid .x-grid3-body .x-grid3-td-name{padding:1px;padding-right:0;background:white!important;border:0 none;border-right:1px solid #eee;}
+.xg-hmenu-sort-asc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-asc.gif);}
+.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-desc.gif);}
+.xg-hmenu-lock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-lock.gif);}
+.xg-hmenu-unlock .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/grid/hmenu-unlock.gif);}
+.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;}
+.x-grid3-hd-btn{display:none;position:absolute;width:14px;background:#c3daf9 url(../js/ext/resources/images/default/grid/grid3-hd-btn.gif) no-repeat left center;right:0;top:0;z-index:2;cursor:pointer;}
+.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 url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) 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;background-image:url(../js/ext/resources/images/default/grid/row-expand-sprite.gif);}
+.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 url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) 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-row-checker,.x-grid3-hd-checker{width:100%;height:18px;background-position:2px 2px;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/grid/row-check-sprite.gif);}
+.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{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 url(../js/ext/resources/images/default/grid/grid3-special-col-bg.gif) repeat-y right;}
+.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner{padding:3px 5px 0 0!important;text-align:right;color:#444;}
+.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 url(../js/ext/resources/images/default/grid/grid3-special-col-sel-bg.gif) 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;background-image:url(../js/ext/resources/images/default/menu/unchecked.gif);}
+.x-grid3-check-col-on{width:100%;height:16px;background-position:center center;background-repeat:no-repeat;background-color:transparent;background-image:url(../js/ext/resources/images/default/menu/checked.gif);}
+.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1;}
+.x-grid-group-hd{border-bottom:2px solid #99bbe8;cursor:pointer;padding-top:6px;}
+.x-grid-group-hd div{background:transparent url(../js/ext/resources/images/default/grid/group-expand-sprite.gif) no-repeat 3px -47px;padding:4px 4px 4px 17px;color:#3764a0;font:bold 100% arial,sans;}
+.x-grid-group-collapsed .x-grid-group-hd div{background-position:3px 3px;}
+.x-grid-group-collapsed .x-grid-group-body{display:none;}
+.x-group-by-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}
+.x-cols-icon{background-image:url(../js/ext/resources/images/default/grid/columns.gif);}
+.x-show-groups-icon{background-image:url(../js/ext/resources/images/default/grid/group-by.gif);}
+.ext-ie .x-grid3 .x-editor .x-form-text{position:relative;top:-1px;}
+.ext-ie .x-props-grid .x-editor .x-form-text{position:static;top:0;}
+.x-grid-empty{padding:10px;color:gray;font:normal 100% arial,sans;}
+.ext-ie7 .x-grid-panel .x-panel-bbar{position:relative;}
+
+.x-dd-drag-proxy{position:absolute;left:0;top:0;visibility:hidden;z-index:15000;}
+.x-dd-drag-ghost{color:black;font:normal 100% arial,helvetica,sans-serif;-moz-opacity:0.85;opacity:.85;filter:alpha(opacity=85);border-top:1px solid #ddd;border-left:1px solid #ddd;border-right:1px solid #bbb;border-bottom:1px solid #bbb;padding:3px;padding-left:20px;background-color:white;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-dd-drop-nodrop .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-no.gif);}
+.x-dd-drop-ok .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-yes.gif);}
+.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/dd/drop-add.gif);}
+.x-view-selector{position:absolute;left:0;top:0;width:0;background:#c3daf9;border:1px dotted #39b;opacity:.5;-moz-opacity:.5;filter:alpha(opacity=50);zoom:1;}
+
+.x-tree .x-panel-body{background-color:#fff;}
+.ext-strict .ext-ie .x-tree .x-panel-bwrap{position:relative;overflow:hidden;}
+.x-tree-icon,.x-tree-ec-icon,.x-tree-elbow-line,.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-repeat:no-repeat;}
+.x-tree-node-collapsed .x-tree-node-icon,.x-tree-node-expanded .x-tree-node-icon,.x-tree-node-leaf .x-tree-node-icon{border:0 none;height:18px;margin:0;padding:0;vertical-align:top;width:16px;background-position:center;background-repeat:no-repeat;}
+.ext-ie .x-tree-node-indent img,.ext-ie .x-tree-node-icon,.ext-ie .x-tree-ec-icon{vertical-align:middle!important;}
+.x-tree-node-expanded .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder-open.gif);}
+.x-tree-node-leaf .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/leaf.gif);}
+.x-tree-node-collapsed .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/folder.gif);}
+.ext-ie input.x-tree-node-cb{width:15px;height:15px;}
+input.x-tree-node-cb{margin-left:1px;}
+.ext-ie input.x-tree-node-cb{margin-left:0;}
+.x-tree-noicon .x-tree-node-icon{width:0;height:0;}
+.x-tree-node-loading .x-tree-node-icon{background-image:url(../js/ext/resources/images/default/tree/loading.gif)!important;}
+.x-tree-node-loading a span{font-style:italic;color:#444;}
+.ext-ie .x-tree-node-el input{width:15px;height:15px;}
+.x-tree-lines .x-tree-elbow{background-image:url(../js/ext/resources/images/default/tree/elbow.gif);}
+.x-tree-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus.gif);}
+.x-tree-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus.gif);}
+.x-tree-lines .x-tree-elbow-end{background-image:url(../js/ext/resources/images/default/tree/elbow-end.gif);}
+.x-tree-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus.gif);}
+.x-tree-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus.gif);}
+.x-tree-lines .x-tree-elbow-line{background-image:url(../js/ext/resources/images/default/tree/elbow-line.gif);}
+.x-tree-no-lines .x-tree-elbow{background:transparent;}
+.x-tree-no-lines .x-tree-elbow-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-plus-nl.gif);}
+.x-tree-no-lines .x-tree-elbow-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-minus-nl.gif);}
+.x-tree-no-lines .x-tree-elbow-end{background:transparent;}
+.x-tree-no-lines .x-tree-elbow-end-plus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-plus-nl.gif);}
+.x-tree-no-lines .x-tree-elbow-end-minus{background-image:url(../js/ext/resources/images/default/tree/elbow-end-minus-nl.gif);}
+.x-tree-no-lines .x-tree-elbow-line{background:transparent;}
+.x-tree-arrows .x-tree-elbow{background:transparent;}
+.x-tree-arrows .x-tree-elbow-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}
+.x-tree-arrows .x-tree-elbow-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}
+.x-tree-arrows .x-tree-elbow-end{background:transparent;}
+.x-tree-arrows .x-tree-elbow-end-plus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat 0 0;}
+.x-tree-arrows .x-tree-elbow-end-minus{background:transparent url(../js/ext/resources/images/default/tree/arrows.gif) no-repeat -16px 0;}
+.x-tree-arrows .x-tree-elbow-line{background:transparent;}
+.x-tree-arrows .x-tree-ec-over .x-tree-elbow-plus{background-position:-32px 0;}
+.x-tree-arrows .x-tree-ec-over .x-tree-elbow-minus{background-position:-48px 0;}
+.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-plus{background-position:-32px 0;}
+.x-tree-arrows .x-tree-ec-over .x-tree-elbow-end-minus{background-position:-48px 0;}
+.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{cursor:pointer;}
+.ext-ie ul.x-tree-node-ct{font-size:0;line-height:0;zoom:1;}
+.x-tree-node{color:black;font:normal 100% arial,sans;white-space:nowrap;}
+.x-tree-node-el{line-height:18px;cursor:pointer;}
+.x-tree-node a,.x-dd-drag-ghost a{text-decoration:none;color:black;-khtml-user-select:none;-moz-user-select:none;-kthml-user-focus:normal;-moz-user-focus:normal;-moz-outline:0 none;outline:0 none;}
+.x-tree-node a span,.x-dd-drag-ghost a span{text-decoration:none;color:black;padding:1px 3px 1px 2px;}
+.x-tree-node .x-tree-node-disabled a span{color:gray!important;}
+.x-tree-node .x-tree-node-disabled .x-tree-node-icon{-moz-opacity:0.5;opacity:.5;filter:alpha(opacity=50);}
+.x-tree-node .x-tree-node-inline-icon{background:transparent;}
+.x-tree-node a:hover,.x-dd-drag-ghost a:hover{text-decoration:none;}
+.x-tree-node div.x-tree-drag-insert-below{border-bottom:1px dotted #36c;}
+.x-tree-node div.x-tree-drag-insert-above{border-top:1px dotted #36c;}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{border-bottom:0 none;}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{border-top:0 none;}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{border-bottom:2px solid #36c;}
+.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{border-top:2px solid #36c;}
+.x-tree-node .x-tree-drag-append a span{background:#ddd;border:1px dotted gray;}
+.x-tree-node .x-tree-node-over{background-color:#eee;}
+.x-tree-node .x-tree-selected{background-color:#d9e8fb;}
+.x-dd-drag-ghost .x-tree-node-indent,.x-dd-drag-ghost .x-tree-ec-icon{display:none!important;}
+.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-add.gif);}
+.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-over.gif);}
+.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-under.gif);}
+.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url(../js/ext/resources/images/default/tree/drop-between.gif);}
+
+.x-date-picker{border:1px solid #1b376c;border-top:0 none;background:#fff;position:relative;}
+.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:url(../js/ext/resources/images/default/shared/hd-sprite.gif) repeat-x 0 -83px;color:#FFF;font:bold 100% arial,sans;overflow:hidden;}
+.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{background:transparent!important;vertical-align:middle;}
+.x-date-middle .x-btn .x-btn-text{color:#fff;}
+.x-date-middle .x-btn-with-menu .x-btn-center em{background:transparent url(../js/ext/resources/images/default/toolbar/btn-arrow-light.gif) 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;}
+.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{background-image:url(../js/ext/resources/images/default/shared/right-btn.gif);margin-right:2px;text-decoration:none!important;}
+.x-date-left a{background-image:url(../js/ext/resources/images/default/shared/left-btn.gif);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:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;text-align:right!important;border-bottom:1px solid #a3bad9;font:normal 100% arial,sans;color:#233d6d;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 #fff;text-align:right;padding:0;}
+.x-date-inner a{padding:2px 5px;display:block;font:normal 100% arial,sans;text-decoration:none;color:black;text-align:right;zoom:1;}
+.x-date-inner .x-date-active{cursor:pointer;color:black;}
+.x-date-inner .x-date-selected a{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;padding:1px 4px;}
+.x-date-inner .x-date-today a{border:1px solid darkred;padding:1px 4px;}
+.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;text-decoration:none!important;}
+.x-date-bottom{padding:4px;border-top:1px solid #a3bad9;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}
+.x-date-inner a:hover,.x-date-inner .x-date-disabled a:hover{text-decoration:none!important;color:black;background:#ddecfe;}
+.x-date-inner .x-date-disabled a{cursor:default;background:#eee;color:#bbb;}
+.x-date-mmenu{background:#eee!important;}
+.x-date-mmenu .x-menu-item{font-size:10px;padding:1px 24px 1px 4px;white-space:nowrap;color:#000;}
+.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;background:white;display:none;}
+.x-date-mp td{padding:2px;font:normal 100% arial,sans;}
+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;background:#083772;color:white;border:1px solid;border-color:#36c #005 #005 #36c;padding:1px 3px 1px;font:normal 100% arial,sans;cursor:pointer;}
+.x-date-mp-btns{background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;}
+.x-date-mp-btns td{border-top:1px solid #c5d2df;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;color:#15428b;}
+td.x-date-mp-month a:hover,td.x-date-mp-year a:hover{color:#15428b;text-decoration:none;cursor:pointer;background:#ddecfe;}
+td.x-date-mp-sel a{padding:1px 3px;background:#dfecfb url(../js/ext/resources/images/default/shared/glass-bg.gif) repeat-x left top;border:1px solid #8db2e3;}
+.x-date-mp-ybtn a{overflow:hidden;width:15px;height:15px;cursor:pointer;background:transparent url(../js/ext/resources/images/default/panel/tool-sprites.gif) 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 #c5d2df;}
+
+.x-tip{position:absolute;top:0;left:0;visibility:hidden;z-index:20000;border:0 none;}
+.x-tip .x-tip-close{background-image:url(../js/ext/resources/images/default/qtip/close.gif);height:15px;float:right;width:15px;margin:0 0 2px 2px;cursor:pointer;display:none;}
+.x-tip .x-tip-tc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -62px;padding-top:3px;overflow:hidden;zoom:1;}
+.x-tip .x-tip-tl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 0;padding-left:6px;overflow:hidden;zoom:1;}
+.x-tip .x-tip-tr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right 0;padding-right:6px;overflow:hidden;zoom:1;}
+.x-tip .x-tip-bc{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -121px;height:3px;overflow:hidden;}
+.x-tip .x-tip-bl{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -59px;padding-left:6px;zoom:1;}
+.x-tip .x-tip-br{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat right -59px;padding-right:6px;zoom:1;}
+.x-tip .x-tip-mc{border:0 none;font:normal 100% arial,sans;}
+.x-tip .x-tip-ml{background:#fff url(../js/ext/resources/images/default/qtip/tip-sprite.gif) no-repeat 0 -124px;padding-left:6px;zoom:1;}
+.x-tip .x-tip-mr{background:transparent url(../js/ext/resources/images/default/qtip/tip-sprite.gif) 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;}
+.x-tip .x-tip-header-text{font:bold 100% arial,sans;padding:0;margin:0 0 2px 0;color:#444;}
+.x-tip .x-tip-body{font:normal 100% arial,sans;margin:0!important;line-height:14px;color:#444;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:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -12px;padding-top:6px;}
+.x-form-invalid-tip .x-tip-tl{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
+.x-form-invalid-tip .x-tip-tr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
+.x-form-invalid-tip .x-tip-bc{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) repeat-x 0 -18px;height:6px;}
+.x-form-invalid-tip .x-tip-bl{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat 0 -6px;}
+.x-form-invalid-tip .x-tip-br{background:url(../js/ext/resources/images/default/form/error-tip-corners.gif) no-repeat right -6px;}
+.x-form-invalid-tip .x-tip-ml{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
+.x-form-invalid-tip .x-tip-mr{background-image:url(../js/ext/resources/images/default/form/error-tip-corners.gif);}
+.x-form-invalid-tip .x-tip-body{padding:2px;}
+.x-form-invalid-tip .x-tip-body{padding-left:24px;background:transparent url(../js/ext/resources/images/default/form/exclamation.gif) no-repeat 2px 2px;}
+
+.x-menu{border:1px solid #718bb7;z-index:15000;zoom:1;background:#f0f0f0 url(../js/ext/resources/images/default/menu/menu.gif) repeat-y;padding:2px;}
+.x-menu a{text-decoration:none!important;}
+.ext-ie .x-menu{zoom:1;overflow:hidden;}
+.x-menu-list{background:transparent;border:0 none;}
+.x-menu li{line-height:100%;}
+.x-menu li.x-menu-sep-li{font-size:1px;line-height:1px;}
+.x-menu-list-item{font:normal 100% arial,sans;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;display:block;padding:1px;}
+.x-menu-item-arrow{background:transparent url(../js/ext/resources/images/default/menu/menu-parent.gif) no-repeat right;}
+.x-menu-sep{display:block;font-size:1px;line-height:1px;margin:2px 3px;background-color:#e0e0e0;border-bottom:1px solid #fff;overflow:hidden;}
+.x-menu-focus{position:absolute;left:0;top:-5px;width:0;height:0;line-height:1px;}
+.x-menu a.x-menu-item{display:block;line-height:16px;padding:3px 21px 3px 3px;white-space:nowrap;text-decoration:none;color:#222;-moz-outline:0 none;outline:0 none;cursor:pointer;}
+.x-menu-item-active{background:#ebf3fd url(../js/ext/resources/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-item-icon{border:0 none;height:16px;padding:0;vertical-align:top;width:16px;margin:0 8px 0 0;background-position:center;}
+.x-menu-check-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/unchecked.gif) no-repeat center;}
+.x-menu-item-checked .x-menu-item-icon{background-image:url(../js/ext/resources/images/default/menu/checked.gif);}
+.x-menu-group-item .x-menu-item-icon{background:transparent;}
+.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{background:transparent url(../js/ext/resources/images/default/menu/group-checked.gif) no-repeat center;}
+.x-menu-plain{background:#fff!important;}
+.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 #a3bad9;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 #a3bae9!important;background:#DFE8F6;padding:0;}
+
+ .x-box-tl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 0;zoom:1;}
+.x-box-tc{height:8px;background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 0;overflow:hidden;}
+.x-box-tr{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat right -8px;}
+.x-box-ml{background:transparent url(../js/ext/resources/images/default/box/l.gif) repeat-y 0;padding-left:4px;overflow:hidden;zoom:1;}
+.x-box-mc{background:#eee url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -16px;padding:4px 10px;font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:100%;}
+.x-box-mc h3{font-size:14px;font-weight:bold;margin:0 0 4px 0;zoom:1;}
+.x-box-mr{background:transparent url(../js/ext/resources/images/default/box/r.gif) repeat-y right;padding-right:4px;overflow:hidden;}
+.x-box-bl{background:transparent url(../js/ext/resources/images/default/box/corners.gif) no-repeat 0 -16px;zoom:1;}
+.x-box-bc{background:transparent url(../js/ext/resources/images/default/box/tb.gif) repeat-x 0 -8px;height:8px;overflow:hidden;}
+.x-box-br{background:transparent url(../js/ext/resources/images/default/box/corners.gif) 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-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(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/images/default/box/l-blue.gif);}
+.x-box-blue .x-box-mr{background-image:url(../js/ext/resources/images/default/box/r-blue.gif);}
+
+#x-debug-browser .x-tree .x-tree-node a span{color:#222297;font-size:100%;padding-top:2px;font-family:"monotype","courier new",sans-serif;line-height:18px;}
+#x-debug-browser .x-tree a i{color:#FF4545;font-style:normal;}
+#x-debug-browser .x-tree a em{color:#999;}
+#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{background:#c3daf9;}
+#x-debug-browser .x-tool-toggle{background-position:0 -75px;}
+#x-debug-browser .x-tool-toggle-over{background-position:-15px -75px;}
+#x-debug-browser.x-panel-collapsed .x-tool-toggle{background-position:0 -60px;}
+#x-debug-browser.x-panel-collapsed .x-tool-toggle-over{background-position:-15px -60px;}
+
+.x-combo-list{border:1px solid #98c0f4;background:#ddecfe;zoom:1;overflow:hidden;}
+.x-combo-list-inner{overflow:auto;background:white;position:relative;zoom:1;overflow-x:hidden;}
+.x-combo-list-hd{font:bold 100% arial,sans;color:#15428b;background-image:url(../js/ext/resources/images/default/layout/panel-title-light-bg.gif);border-bottom:1px solid #98c0f4;padding:3px;}
+.x-resizable-pinned .x-combo-list-inner{border-bottom:1px solid #98c0f4;}
+.x-combo-list-item{font:normal 100% arial,sans;padding:2px;border:1px solid #fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
+.x-combo-list .x-combo-selected{border:1px dotted #a3bae9!important;background:#DFE8F6;cursor:pointer;}
+.x-combo-noedit{cursor:pointer;}
+.x-combo-list .x-toolbar{border-top:1px solid #98c0f4;border-bottom:0 none;}
+.x-combo-list-small .x-combo-list-item{font:normal 100% arial,sans;}
+
+.x-panel{border-style:solid;border-color:#99bbe8;border-width:0;}
+.x-panel-header{overflow:hidden;zoom:1;color:#15428b;font:bold 100% arial,sans;padding:5px 3px 4px 5px;border:1px solid #99bbe8;line-height:15px;background:transparent url(../js/ext/resources/images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;}
+.x-panel-body{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;background:white;position:relative;}
+.x-panel-bbar .x-toolbar{border:1px solid #99bbe8;border-top:0 none;overflow:hidden;padding:2px;}
+.x-panel-tbar .x-toolbar{border:1px solid #99bbe8;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 #99bbe8;border-bottom:0 none;}
+.x-panel-body-noheader,.x-panel-mc .x-panel-body{border-top:1px solid #99bbe8;}
+.x-panel-header{overflow:hidden;zoom:1;}
+.x-panel-tl .x-panel-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px 0;border:0 none;background:transparent;}
+.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 url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 0;overflow:hidden;}
+.ext-strict .ext-ie7 .x-panel-tc{overflow:visible;}
+.x-panel-tl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 0;padding-left:6px;zoom:1;border-bottom:1px solid #99bbe8;}
+.x-panel-tr{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right 0;zoom:1;padding-right:6px;}
+.x-panel-bc{background:transparent url(../js/ext/resources/images/default/panel/top-bottom.gif) repeat-x 0 bottom;zoom:1;}
+.x-panel-bc .x-panel-footer{zoom:1;}
+.x-panel-bl{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat 0 bottom;padding-left:6px;zoom:1;}
+.x-panel-br{background:transparent url(../js/ext/resources/images/default/panel/corners-sprite.gif) no-repeat right bottom;padding-right:6px;zoom:1;}
+.x-panel-mc{border:0 none;padding:0;margin:0;font:normal 100% arial,sans;padding-top:6px;background:#dfe8f6;}
+.x-panel-mc .x-panel-body{background:transparent;border:0 none;}
+.x-panel-ml{background:#fff url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y 0 0;padding-left:6px;zoom:1;}
+.x-panel-mr{background:transparent url(../js/ext/resources/images/default/panel/left-right.gif) repeat-y right 0;padding-right:6px;zoom:1;}
+.x-panel-bc .x-panel-footer{padding-bottom:6px;}
+.x-panel-nofooter .x-panel-bc{height:6px;font-size:0;line-height:0;}
+.x-panel-bwrap{overflow:hidden;zoom:1;}
+.x-panel-body{overflow:hidden;zoom:1;}
+.x-panel-collapsed .x-resizable-handle{display:none;}
+.ext-gecko .x-panel-animated div{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 url(../js/ext/resources/images/default/panel/tool-sprites.gif) 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{background:#cbddf3;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 #99bbe8;border-top:0 none;display:block;}
+.x-panel-ghost *{cursor:move!important;}
+.x-panel-dd-spacer{border:2px dashed #99bbe8;}
+.x-panel-btns-ct{padding:5px;}
+.x-panel-btns-ct .x-btn{float:right;clear:none;}
+.x-panel-btns-ct .x-panel-btns td{border:0;padding:0;}
+.x-panel-btns-ct .x-panel-btns-right table{float:right;clear:none;}
+.x-panel-btns-ct .x-panel-btns-left table{float:left;clear:none;}
+.x-panel-btns-ct .x-panel-btns-center{text-align:center;}
+.x-panel-btns-ct .x-panel-btns-center table{margin:0 auto;}
+.x-panel-btns-ct table td.x-panel-btn-td{padding:3px;}
+.x-panel-btns-ct .x-btn-focus .x-btn-left{background-position:0 -147px;}
+.x-panel-btns-ct .x-btn-focus .x-btn-right{background-position:0 -168px;}
+.x-panel-btns-ct .x-btn-focus .x-btn-center{background-position:0 -189px;}
+.x-panel-btns-ct .x-btn-over .x-btn-left{background-position:0 -63px;}
+.x-panel-btns-ct .x-btn-over .x-btn-right{background-position:0 -84px;}
+.x-panel-btns-ct .x-btn-over .x-btn-center{background-position:0 -105px;}
+.x-panel-btns-ct .x-btn-click .x-btn-center{background-position:0 -126px;}
+.x-panel-btns-ct .x-btn-click .x-btn-right{background-position:0 -84px;}
+.x-panel-btns-ct .x-btn-click .x-btn-left{background-position:0 -63px;}
+
+.x-window{zoom:1;}
+.x-window .x-resizable-handle{opacity:0;-moz-opacity:0;filter:alpha(opacity=0);}
+.x-window-proxy{background:#C7DFFC;border:1px solid #99bbe8;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;}
+.x-window-tl .x-window-header{color:#15428b;font:bold 100% arial,sans;padding:5px 0 4px 0;}
+.x-window-header-text{cursor:pointer;}
+.x-window-tc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) repeat-x 0 0;overflow:hidden;zoom:1;}
+.x-window-tl{background:transparent url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 0;padding-left:6px;zoom:1;z-index:1;position:relative;}
+.x-window-tr{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right 0;padding-right:6px;}
+.x-window-bc{background:transparent url(../js/ext/resources/images/default/window/top-bottom.png) 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 url(../js/ext/resources/images/default/window/left-corners.png) no-repeat 0 bottom;padding-left:6px;zoom:1;}
+.x-window-br{background:transparent url(../js/ext/resources/images/default/window/right-corners.png) no-repeat right bottom;padding-right:6px;zoom:1;}
+.x-window-mc{border:1px solid #99bbe8;padding:0;margin:0;font:normal 100% arial,sans;background:#dfe8f6;}
+.x-window-ml{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y 0 0;padding-left:6px;zoom:1;}
+.x-window-mr{background:transparent url(../js/ext/resources/images/default/window/left-right.png) repeat-y right 0;padding-right:6px;zoom:1;}
+.x-panel-nofooter .x-window-bc{height:6px;}
+.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;background-color:white;}
+.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 #99bbe8;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 #99bbe8;}
+.x-panel-collapsed .x-window-tl{border-bottom:1px solid #84a0c4;}
+.x-window-maximized-ct{overflow:hidden;}
+.x-window-maximized .x-resizable-handle{display:none;}
+.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);background-color:#CCC;}
+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{background:#CAD9EC;border-right:1px solid #DFE8F6;border-bottom:1px solid #DFE8F6;border-top:1px solid #a3bae9;border-left:1px solid #a3bae9;}
+.x-window-plain .x-window-body{border-left:1px solid #DFE8F6;border-top:1px solid #DFE8F6;border-bottom:1px solid #a3bae9;border-right:1px solid #a3bae9;background:transparent!important;}
+body.x-body-masked .x-window-plain .x-window-mc{background:#C7D6E9;}
+
+.x-html-editor-wrap{border:1px solid #a9bfd3;background:white;}
+.x-html-editor-tb .x-btn-text{background:transparent url(../js/ext/resources/images/default/editor/tb-sprite.gif) no-repeat;}
+.x-html-editor-tb .x-edit-bold .x-btn-text{background-position:0 0;}
+.x-html-editor-tb .x-edit-italic .x-btn-text{background-position:-16px 0;}
+.x-html-editor-tb .x-edit-underline .x-btn-text{background-position:-32px 0;}
+.x-html-editor-tb .x-edit-forecolor .x-btn-text{background-position:-160px 0;}
+.x-html-editor-tb .x-edit-backcolor .x-btn-text{background-position:-176px 0;}
+.x-html-editor-tb .x-edit-justifyleft .x-btn-text{background-position:-112px 0;}
+.x-html-editor-tb .x-edit-justifycenter .x-btn-text{background-position:-128px 0;}
+.x-html-editor-tb .x-edit-justifyright .x-btn-text{background-position:-144px 0;}
+.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text{background-position:-80px 0;}
+.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text{background-position:-96px 0;}
+.x-html-editor-tb .x-edit-increasefontsize .x-btn-text{background-position:-48px 0;}
+.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text{background-position:-64px 0;}
+.x-html-editor-tb .x-edit-sourceedit .x-btn-text{background-position:-192px 0;}
+.x-html-editor-tb .x-edit-createlink .x-btn-text{background-position:-208px 0;}
+.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;border-bottom:1px solid #99bbe8;}
+.x-panel-noborder .x-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}
+.x-panel-noborder .x-panel-bbar-noborder .x-toolbar{border-width:0;border-top:1px solid #99bbe8;}
+.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 #99bbe8;}
+.x-tab-panel-tbar-noborder .x-toolbar{border-width:0;border-bottom:1px solid #99bbe8;}
+
+.x-border-layout-ct{background:#dfe8f6;}
+.x-border-panel{position:absolute;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{color:#222;padding-top:4px;padding-bottom:3px;border-top:0 none;font-weight:normal;background:transparent url(../js/ext/resources/images/default/panel/light-hd.gif) repeat-x 0 -9px;}
+.x-layout-collapsed{position:absolute;left:-10000px;top:-10000px;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-layout-split{position:absolute;height:5px;width:5px;line-height:1px;font-size:1px;z-index:3;background-color:transparent;}
+.x-layout-split-h{background-image:url(../js/ext/resources/images/default/s.gif);background-position:left;}
+.x-layout-split-v{background-image:url(../js/ext/resources/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-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%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}
+.x-layout-split-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}
+.x-layout-split-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}
+.x-layout-split-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}
+.x-layout-cmini-west .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-right.gif);}
+.x-layout-cmini-east .x-layout-mini{top:48%;background-image:url(../js/ext/resources/images/default/layout/mini-left.gif);}
+.x-layout-cmini-north .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-bottom.gif);}
+.x-layout-cmini-south .x-layout-mini{left:48%;height:5px;width:35px;background-image:url(../js/ext/resources/images/default/layout/mini-top.gif);}
+.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;left:0;top:0;}
+.ext-ie input.x-abs-layout-item,.ext-ie textarea.x-abs-layout-item{margin:0;}
+
+.x-progress-wrap{border:1px solid #6593cf;overflow:hidden;}
+.x-progress-inner{height:18px;background:#e0e8f3 url(../js/ext/resources/images/default/qtip/bg.gif) repeat-x;position:relative;}
+.x-progress-bar{height:18px;float:left;width:0;background:#9CBFEE url( ../js/ext/resources/images/default/progress/progress-bg.gif ) repeat-x left center;border-top:1px solid #D1E4FD;border-bottom:1px solid #7FA9E4;border-right:1px solid #7FA9E4;}
+.x-progress-text{font-size:100%;font-weight:bold;color:#fff;padding:1px 5px;overflow:hidden;position:absolute;left:0;text-align:center;}
+.x-progress-text-back{color:#396095;line-height:16px;}
+.ext-ie .x-progress-text-back{line-height:15px;}
+
+.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-text,.x-window-dlg .x-window-header-text{font-size:100%;}
+.x-window-dlg .ext-mb-input{margin-top:4px;width:95%;}
+.x-window-dlg .ext-mb-textarea{margin-top:4px;font:normal 100% arial,sans;}
+.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 url(../js/ext/resources/images/default/grid/loading.gif) 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 .ext-mb-info{background:transparent url(../js/ext/resources/images/default/window/icon-info.gif) no-repeat top left;}
+.x-window-dlg .ext-mb-warning{background:transparent url(../js/ext/resources/images/default/window/icon-warning.gif) no-repeat top left;}
+.x-window-dlg .ext-mb-question{background:transparent url(../js/ext/resources/images/default/window/icon-question.gif) no-repeat top left;}
+.x-window-dlg .ext-mb-error{background:transparent url(../js/ext/resources/images/default/window/icon-error.gif) no-repeat top left;}
+
+
+
+/*
+ * Ext JS Library 2.0.2
+ * Copyright(c) 2006-2008, Ext JS, LLC.
+ * licensing(a)extjs.com
+ *
+ * http://extjs.com/license
+ */
+
+.x-panel {
+ border-style: solid;
+ border-color: #d0d0d0;
+}
+.x-panel-header {
+ color:#333;
+ border:1px solid #d0d0d0;
+ background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/panel/top-bottom.gif);
+}
+.x-panel-tl {
+ background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
+ border-color:#d0d0d0;
+}
+.x-panel-tr {
+ background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
+}
+.x-panel-bc {
+ background-image:url(../js/ext/resources/images/gray/panel/top-bottom.gif);
+}
+.x-panel-bl {
+ background-image:url(../js/ext/resources/images/gray/panel/corners-sprite.gif);
+}
+.x-panel-br {
+ background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/panel/left-right.gif);
+}
+.x-panel-mr {
+ background-image:url(../js/ext/resources/images/gray/panel/left-right.gif);
+}
+
+/* Tools */
+.x-tool {
+ background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/button/btn-sprite.gif);
+}
+.x-btn-right{
+ background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);
+}
+.x-btn-center{
+ background-image:url(../js/ext/resources/images/gray/button/btn-sprite.gif);
+}
+
+/* Layout classes */
+
+.x-border-layout-ct {
+ background:#f0f0f0;
+}
+
+.x-accordion-hd {
+ background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-top-left {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-top-right {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft-left {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-ft-right {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-bd-left {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+.x-tip .x-tip-bd-right {
+ background-image:url(../js/ext/resources/images/gray/qtip/tip-sprite.gif);
+}
+
+/* Toolbars */
+
+.x-toolbar{
+ border-color:#d0d0d0;
+ background:#f0f4f5 url(../js/ext/resources/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(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);
+}
+.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
+ background-image:url(../js/ext/resources/images/gray/toolbar/btn-arrow.gif);
+}
+.x-toolbar .x-btn-over .x-btn-left{
+ background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
+}
+.x-toolbar .x-btn-over .x-btn-right{
+ background-image:url(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
+}
+.x-toolbar .x-btn-over .x-btn-center{
+ background-image:url(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/images/gray/toolbar/tb-btn-sprite.gif);
+}
+.x-toolbar .ytb-sep {
+ background-image: url(../js/ext/resources/images/default/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(../js/ext/resources/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(../js/ext/resources/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(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);
+}
+
+.x-tab-strip-top .x-tab-left {
+ background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);
+}
+.x-tab-strip-top .x-tab-strip-inner {
+ background-image:url(../js/ext/resources/images/gray/tabs/tabs-sprite.gif);
+}
+
+.x-tab-strip-bottom .x-tab-right {
+ background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif);
+}
+
+.x-tab-strip-bottom .x-tab-left {
+ background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif);
+}
+
+.x-tab-strip-bottom .x-tab-strip-active .x-tab-right {
+ background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-right-bg.gif);
+}
+
+.x-tab-strip-bottom .x-tab-strip-active .x-tab-left {
+ background-image:url(../js/ext/resources/images/gray/tabs/tab-btm-left-bg.gif);
+}
+
+.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close {
+ background-image:url(../js/ext/resources/images/gray/tabs/tab-close.gif);
+}
+.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close:hover{
+ background-image:url(../js/ext/resources/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(../js/ext/resources/images/gray/tabs/scroll-left.gif);
+ border-color:#aeaeae;
+}
+.x-tab-scroller-right {
+ background-image: url(../js/ext/resources/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(../js/ext/resources/images/gray/window/top-bottom.png);
+}
+.x-window-tl {
+ background-image:url(../js/ext/resources/images/gray/window/left-corners.png);
+}
+.x-window-tr {
+ background-image:url(../js/ext/resources/images/gray/window/right-corners.png);
+}
+.x-window-bc {
+ background-image:url(../js/ext/resources/images/gray/window/top-bottom.png);
+}
+.x-window-bl {
+ background-image:url(../js/ext/resources/images/gray/window/left-corners.png);
+}
+.x-window-br {
+ background-image:url(../js/ext/resources/images/gray/window/right-corners.png);
+}
+.x-window-mc {
+ border:1px solid #d0d0d0;
+ background:#e8e8e8;
+}
+
+.x-window-ml {
+ background-image:url(../js/ext/resources/images/gray/window/left-right.png);
+}
+.x-window-mr {
+ background-image:url(../js/ext/resources/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;
+}
+
+.kunebody {
+ background-color: #FFF;
+ color: #000;
+ font-family: arial, sans;
+ margin: 5px 5px 5px 5px;
+}
+
+#kuneinitialcurtain {
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ width: 100%;
+ height: 100%;
+ background-color: #FFF;
+ z-index: 9999;
+}
+
+/* Global styles */
+
+.gwt-HorizontalSplitPanel .hsplitter {
+ cursor: e-resize;
+ width: 6px;
+}
+
+.gwt-DialogBox {
+ border: 8px solid #C3D9FF;
+ border: 2px outset;
+ background-color: white;
+}
+
+.gwt-DialogBox .Caption {
+ background-color: #C3D9FF;
+ font-size: 85%;
+ font-weight: 700;
+ padding: 3px;
+ margin: 2px;
+ cursor: default;
+}
+
+.gwt-MenuBar {
+ background-color: #F2F2F2;
+ border: 1px solid #999;
+ vertical-align: middle;
+ padding: 5px 0;
+}
+
+.gwt-MenuBar .gwt-MenuItem {
+ cursor: pointer;
+ padding: 1px 10px;
+ white-space: nowrap;
+}
+
+.gwt-MenuBar .gwt-MenuItem img {
+ vertical-align: middle;
+ margin-right: 3px;
+}
+
+.gwt-MenuBar .gwt-MenuItem {
+ background-color: #F2F2F2;
+}
+
+.gwt-MenuBar .gwt-MenuItem-selected {
+ background-color: #FFB958;
+}
+
+.kune-MenuBar .gwt-MenuItem {
+ background: transparent url(img/button-bg-hard.gif) repeat-x 0 0;
+ border-left: 1px solid #AAA;
+ border-right: 1px solid #AAA;
+ color: #999;
+ cursor: pointer;
+ cursor: hand;
+ white-space: nowrap;
+ padding: 0 10px;
+}
+
+.kune-MenuBar .gwt-MenuItem-selected {
+ background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
+ color: #996633;
+}
+
+.kune-expandHoriz {
+ width: 100%;
+}
+
+.kune-expandVert {
+ height: 100%;
+}
+
+.kune-floatleft {
+ float: left;
+}
+
+.kune-floatright {
+ float: right;
+}
+
+/* Deprecated */
+.kune-Default-Form {
+ margin: 10px;
+}
+
+.kune-valignmiddle {
+ vertical-align: middle;
+}
+
+fieldset {
+ border:1px solid #B5B8C8;
+ /* margin-bottom:10px; */
+ padding:10px 10px 5px;
+}
+
+legend {
+ color:#15428B;
+ font-size: 85%;
+ font-size-adjust:none;
+ font-style:normal;
+ font-variant:normal;
+ font-weight:bold;
+ line-height:normal;
+}
+
+.gwt-RadioButton input {
+ margin: 0 3px;
+ vertical-align:middle;
+}
+
+.gwt-RadioButton label {
+ margin: 0 3px;
+ vertical-align:middle;
+}
+
+.kune-pointer {
+ cursor: pointer;
+}
+
+.kuneLabelPre {
+ white-space: pre !important;
+}
+
+/* Buttons */
+
+.kune-CustomPushButton-space {
+ margin-top: 3px;
+ margin-bottom: 3px;
+}
+
+.kune-CustomPushButton {
+ background: transparent url(img/button-bg-hard.gif) repeat-x 0 0;
+ border-left: 1px solid #AAA;
+ border-right: 1px solid #AAA;
+ color: #999;
+ cursor: pointer;
+ white-space: nowrap;
+ padding: 0px 12px;
+}
+
+.kune-CustomPushButton-up {
+ color: #161616;
+}
+
+.kune-CustomPushButton-down {
+ color: black;
+}
+
+.kune-CustomPushButton-up-hovering {
+ color: #161616;
+ background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
+}
+
+.kune-CustomPushButton-down-hovering {
+ color: black;
+}
+
+.kune-CustomPushButton-up-disabled {
+ background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
+ color: #E0E0E0;
+ cursor: default;
+}
+
+.kune-CustomPushButton-down-disabled {
+ background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
+ color: #E0E0E0;
+ cursor: default;
+}
+
+.kune-Button-Large-lrSpace {
+ margin-left: 12px;
+ margin-right: 12px;
+}
+
+.kune-Button-Large-rSpace {
+ margin-right: 12px;
+}
+
+.kune-Button-Large-lSpace {
+ margin-left: 12px;
+}
+
+.kune-Button-Large-tbSpace {
+ margin-top: 12px;
+ margin-bottom: 12px;
+}
+
+.kune-Button-Small-lrSpace {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.kune-Button-Small-rSpace {
+ margin-right: 10px;
+}
+
+.kune-Button-Small-lSpace {
+ margin-left: 10px;
+}
+
+.kune-Button-Small-tbSpace {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.kune-Button-Mini-lSpace {
+ margin-left: 8px;
+}
+
+.kune-Button-Mini-lrSpace {
+ margin-left: 8px;
+ margin-right: 8px;
+}
+
+.kune-Button-Mini-rSpace {
+ margin-right: 8px;
+}
+
+.kune-Button-Mini-tbSpace {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.kune-IconHyperlink {
+}
+
+.kune-IconHyperlink a:link {
+ /* text-decoration: underline; */
+ color: green;
+}
+
+.kune-IconHyperlink a:hover {
+ text-decoration: underline;
+}
+
+.kune-IconHyperlink a:visited {
+ color: #808000;
+}
+
+.kune-IconHyperlink img {
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+.kune-IconLabel {
+
+}
+
+.kune-IconLabel img {
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+.kune-link {
+ text-decoration: underline;
+ color: green;
+ cursor: pointer;
+}
+
+/* DropDowns */
+
+.kune-DropDownOuter {
+ background-color: green;
+}
+
+.kune-DropDownInner {
+ margin: 0 3px 1px 3px;
+ background: green;
+ background-color: #FFF;
+ padding: 3px;
+}
+
+.kune-DropDownLabel {
+ color: #FFF;
+ cursor: pointer;
+}
+
+.kune-DropDownLabel .gwt-Label {
+ margin: 0 5px 0 0;
+ width: 100%;
+}
+
+.kune-DropDownLabel img {
+ margin: 0 3px 0 1px;
+}
+
+.kune-IconLabel {
+ color: green;
+}
+
+.kune-IconLabel img {
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+/* Used in multi chat panel status change */
+.x-menu-item img {
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+/* Margins */
+
+.kune-Margin-40-trbl {
+ margin: 40px;
+}
+
+.kune-Margin-40-lr {
+ margin-left: 40px;
+ margin-right: 40px;
+}
+
+.kune-Margin-40-tl {
+ margin-top: 40px;
+ margin-left: 40px;
+}
+
+.kune-Margin-40-tb {
+ margin-top: 40px;
+ margin-bottom: 40px;
+}
+
+.kune-Margin-40-t {
+ margin-top: 40px;
+}
+
+.kune-Margin-40-r {
+ margin-right: 40px;
+}
+
+.kune-Margin-40-l {
+ margin-left: 40px;
+}
+
+.kune-Margin-20-trbl {
+ margin: 20px;
+}
+
+.kune-Margin-20-lr {
+ margin-left: 20px;
+ margin-right: 20px;
+}
+
+.kune-Margin-20-tl {
+ margin-top: 20px;
+ margin-left: 20px;
+}
+
+.kune-Margin-20-tb {
+ margin-top: 20px;
+ margin-bottom: 20px;
+}
+
+.kune-Margin-20-t {
+ margin-top: 20px;
+}
+
+.kune-Margin-20-r {
+ margin-right: 20px;
+}
+
+.kune-Margin-20-l {
+ margin-left: 20px;
+}
+
+.kune-Margin-Large-trbl {
+ margin: 10px;
+}
+
+.kune-Margin-Large-lr {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.kune-Margin-Large-tl {
+ margin-top: 10px;
+ margin-left: 10px;
+}
+
+.kune-Margin-Large-tb {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.kune-Margin-Large-t {
+ margin-top: 10px;
+}
+
+.kune-Margin-Large-r {
+ margin-right: 10px;
+}
+
+.kune-Margin-Large-l {
+ margin-left: 10px;
+}
+
+.kune-Margin-Medium-trbl {
+ margin: 5px;
+}
+
+.kune-Margin-Medium-lr {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+.kune-Margin-Medium-tl {
+ margin-top: 5px;
+ margin-left: 5px;
+}
+
+.kune-Margin-Medium-tb {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+
+.kune-Margin-Medium-t {
+ margin-top: 5px;
+}
+
+.kune-Margin-Medium-r {
+ margin-right: 5px;
+}
+
+.kune-Margin-Medium-b {
+ margin-bottom: 5px;
+}
+
+.kune-Margin-Medium-l {
+ margin-left: 5px;
+}
+
+.kune-Margin-Small-trbl {
+ margin: 3px;
+}
+
+.kune-Margin-Small-lr {
+ margin-left: 3px;
+ margin-right: 3px;
+}
+
+.kune-Margin-Small-tl {
+ margin-top: 3px;
+ margin-left: 3px;
+}
+
+.kune-Margin-Small-tb {
+ margin-top: 3px;
+ margin-bottom: 3px;
+}
+
+.kune-Margin-Small-t {
+ margin-top: 3px;
+}
+
+.kune-Margin-Small-l {
+ margin-left: 3px;
+}
+
+.kune-Margin-Small-r {
+ margin-right: 3px;
+}
+
+.kune-Margin-Small-b {
+ margin-bottom: 3px;
+}
+
+.kune-Margin-Mini-trbl {
+ margin: 1px;
+}
+
+.kune-Margin-Mini-lr {
+ margin-left: 1px;
+ margin-right: 1px;
+}
+
+.kune-Margin-Mini-tl {
+ margin-top: 1px;
+ margin-left: 1px;
+}
+
+.kune-Margin-Mini-tb {
+ margin-top: 1px;
+ margin-bottom: 1px;
+}
+
+.kune-Margin-Mini-t {
+ margin-top: 1px;
+}
+
+.kune-Margin-Mini-r {
+ margin-right: 1px;
+}
+
+.kune-Margin-Mini-b {
+ margin-bottom: 1px;
+}
+
+.kune-Margin-Mini-l {
+ margin-left: 1px;
+}
+
+/* Fonts
+see: http://developer.yahoo.com/yui/fonts/ */
+
+.kune-ft10px {
+ font-size: 77%
+}
+
+.kune-ft11px {
+ font-size: 85%
+}
+
+.kune-ft12px {
+ font-size: 93%
+}
+
+.kune-ft13px {
+ font-size: 100%
+}
+
+.kune-ft14px {
+ font-size: 108%
+}
+
+.kune-ft15px {
+ font-size: 116%
+}
+
+.kune-ft16px {
+ font-size: 123.1%
+}
+
+.kune-ft17px {
+ font-size: 131%
+}
+
+.kune-ft18px {
+ font-size: 138.5%
+}
+
+.kune-ft19px {
+ font-size: 146.5%
+}
+
+.kune-ft20px {
+ font-size: 153.9%
+}
+
+.kune-ft21px {
+ font-size: 161.6%
+}
+
+.kune-ft22px {
+ font-size: 167%
+}
+
+.kune-ft23px {
+ font-size: 174%
+}
+
+.kune-ft24px {
+ font-size: 182%
+}
+
+.kune-ft25px {
+ font-size: 189%
+}
+
+.kune-ft26px {
+ font-size: 197%
+}
+
+
+/* Sitebar */
+
+.kune-SiteBarPanel .kune-IconHyperlink {
+ white-space: nowrap;
+}
+
+.kune-SiteBarPanel .kune-IconHyperlink a:link {
+ cursor: pointer;
+ text-decoration: underline;
+ color: #B3B3B3;
+}
+
+.kune-SiteBarPanel .kune-IconHyperlink a:hover {
+ text-decoration: underline;
+}
+
+.kune-SiteBarPanel .kune-IconHyperlink a:visited {
+ color: #B3B3B3;
+}
+
+.kune-SiteBarPanel {
+ margin-right: 10px;
+ height: 16px;
+}
+
+.kune-SiteBarPanel .gwt-TextBox {
+ border: 1px solid #E4A374;
+ margin: 0 15px 0 3px;
+ padding-left: 3px;
+ color: #B3B3B3;
+}
+
+.kune-SiteBarPanel .gwt-Hyperlink a {
+ white-space: nowrap;
+ color: #B3B3B3;
+ text-decoration: underline;
+ cursor: pointer;
+}
+
+.kune-SiteBarPanel .gwt-PushButton {
+ cursor: pointer;
+}
+
+.kune-SiteBarPanel-Separator {
+ color: #E4A374;
+ margin: 0 5px;
+}
+
+.kune-SiteBarPanel-SpaceSeparator {
+ width: 10px;
+}
+
+.kune-SiteMessagePanel {
+ color: #250;
+ position: absolute;
+ z-index: 10000;
+ vertical-align: middle;
+}
+
+.kune-SiteMessagePanel .gwt-HTML {
+ margin: 15px 5px 15px 2px;
+}
+
+.kune-SiteMessagePanel .gwt-Image {
+ margin: 5px;
+}
+
+.kune-SiteMessagePanel-error {
+ background-color: #FFB380;
+ border: 1px solid #FF0066;
+}
+
+.kune-SiteMessagePanel-veryimp {
+ background-color: #FFD4AA;
+ border: 1px solid #FF5599;
+}
+
+.kune-SiteMessagePanel-imp {
+ background-color: #FFE6D5;
+ border: 1px solid #DE87AA;
+}
+
+.kune-SiteMessagePanel-info {
+ background-color: #E5FF80;
+ border: 1px solid #87DE87;
+}
+
+/* Workspace styles */
+.kune-WorkspacePanel {
+ width: 100%;
+ background-color: #FFF;
+}
+
+.kune-WokspacePanel .Tab {
+
+}
+
+.kune-WorkspacePanel .GeneralHP {
+
+}
+
+.kune-WorkspacePanel .ContextPanel {
+ width: 100%;
+ border-right: 3px solid #DD8A3D;
+}
+
+.kune-GroupSummaryPanel {
+ margin: 5px 0 0 5px;
+ width: 100%;
+}
+
+.kune-GroupToolsBar {
+ width: 150px;
+}
+
+.kune-GroupToolsBar-itemSelected {
+ margin-bottom: 5px;
+}
+
+.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a {
+ color: #FFF;
+ padding: 0 9px;
+ text-decoration: none;
+}
+
+.kune-GroupToolsBar-itemSelected .gwt-Hyperlink a:hover {
+ text-decoration: none;
+}
+
+.kune-GroupToolsBar-itemNotSelected {
+ margin-bottom: 5px;
+}
+
+.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a {
+ color: green;
+ padding: 0 9px;
+ text-decoration: none;
+}
+
+.kune-GroupToolsBar-itemNotSelected .gwt-Hyperlink a:hover {
+ text-decoration: none;
+}
+
+/* Content titles */
+
+.kune-ContentToolBarPanel {
+ background-color: #F2F2F2;
+ padding: 2px;
+ height: 24px;
+ vertical-align: middle;
+}
+
+.kune-ContentBottomBar {
+ vertical-align: middle;
+ height: 24px;
+}
+
+.kune-ContentBottomBar .gwt-Image {
+ margin-left: 5px;
+ cursor: pointer;
+ float: left;
+}
+
+.kune-ContentBottomBar .gwt-Label a {
+
+}
+
+/* Main Content & Context */
+.kune-WorkspacePanel-Content {
+ background-color: #FCFCFC;
+ width: 100%;
+ height: 100%;
+}
+
+.kune-WorkspacePanel-Content .main-content {
+ margin: 7px 5px 5px 10px;
+}
+
+.kune-WorkspacePanel-Context {
+ background-color: #CFA;
+ width: 100%;
+ height: 100%;
+}
+
+.kune-NavigationBar {
+ width: 100%;
+}
+
+.kune-NavigationBar .topBar {
+ background-color: #ececec;
+ background: #ececec;
+ border-bottom: 1px solid #e3dbdb;
+ vertical-align: middle;
+}
+
+.kune-NavigationBar .topBar .gwt-PushButton {
+ margin: 1px 3px 1px 0;
+}
+
+.kune-NavigationBar .topBar .gwt-Label {
+ vertical-align: middle;
+}
+
+.kune-NavigationBar .kune-topBar-iconBar {
+ margin: 2px 0 2px 5px;
+}
+
+.kune-NavigationBar .kune-ContextItemsPanel-LabelLink {
+ /* text-decoration: underline; */
+ color: green;
+ cursor: pointer;
+ margin-left: 3px;
+}
+
+/*
.topBar .gwt-PushButton-up-disabled {
filter: alpha(opacity = 20);
-moz-opacity: 0.2;
@@ -33,6 +2132,1350 @@
-moz-opacity: 0.2;
opacity: 0.2;
}
-*/.kune-NavigationBar .topBar .gwt-Image{margin:0 2px 0 5px;}.kune-NavigationBar .Items{margin:2px 0;}.kune-NavigationBar .Items .gwt-Image{margin:2px 0;vertical-align:middle;}.kune-NavigationBar .Items .gwt-Hyperlink a{color:green;/* FIXME: other color */}.kune-NavigationBar .topBar .topBar-margin{margin-left:5px;}.kune-NavigationBar .pathMenu{vertical-align:middle;}.kune-NavigationBar .pathMenu .gwt-MenuItem{background:transparent url(img/button-bg-hard.gif) repeat-x 0 0;border-left:1px solid #AAA;border-right:1px solid #AAA;color:#999;cursor:pointer;white-space:nowrap;padding:3px 6px;}.kune-NavigationBar .pathMenu .gwt-MenuItem-selected{background:transparent url(img/button-bg-soft.gif) repeat-x 0 0;color:#000;}.kune-NavigationBar .kune-IconHyperlink{vertical-align:middle;margin-left:5px;}.kune-NavigationBar .kune-IconHyperlink a{color:green;text-decoration:none;}.kune-NavigationBar .kune-IconHyperlink .gwt-Image{margin-right:3px;vertical-align:middle;}/* Social Network */.kune-StackedDropDownPanel{}.kune-StackedDropDownPanel .gwt-StackPanelItem{border-top:1px solid #CCC;border-bottom:1px solid #CCC;background-color:#EFA;cursor:pointer;padding:1px 3px 0 6px;overflow:hidden;}.kune-StackedDropDownPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-StackedDropDownPanel .kune-DropDownInner table{width:100%;}.kune-StackedDropDownPanel .gwt-StackPanelItem-selected{}.kune-StackedDropDownPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-StackedDropDownPanel .kune-DropDownInner{padding:0;}/* StackedDropDownPanel Members */.kune-StackSubItemLabel{overflow:hidden;}.kune-StackSubItemLabel .gwt-MenuItem{white-space:nowrap;cursor:pointer;border-bottom:1px solid #F2F2F2;}.kune-StackSubItemLabel table{width:100%;}.kune-StackSubItemLabel .gwt-MenuItem img{vertical-align:middle;margin-top:1px;margin-bottom:1px;margin-left:5px;margin-right:3px;}.kune-StackSubItemLabel .gwt-MenuItem-selected{background-color:#FFE6D5;}.kune-StackSubItemActions{background-color:#F2F2F2;border:1px solid #999;vertical-align:middle;padding:5px 0;margin-left:-120px;margin-top:-2px;}.kune-StackSubItemActions .gwt-MenuItem{cursor:pointer;padding:1px 10px;white-space:nowrap;}.kune-StackSubItemActions .gwt-MenuItem img{vertical-align:middle;margin-right:3px;}.kune-StackSubItemActions .gwt-MenuItem-selected{background-color:#FFB958;}/* AccessList */.kune-AccessListSubLabel{font-style:italic;}.kune-AccessList{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel{margin:5px;width:100%;}.kune-AccessList .gwt-DisclosurePanel-open{width:100%;}.kune-AccessList .gwt-DisclosurePanel-closed{width:100%;}.kune-AccessList .header{margin:0 0 3px;text-decoration:none;width:100%;background-color:#8DD35F;}.kune-AccessList .header table{margin:0 5px 0 0;width:100%;color:#FFF;}.kune-AccessList .header img{margin:0 3px 0 0;}.kune-AccessList .content{margin:0 0 0 7px;width:100%;}.kune-AccessList .content table{margin-bottom:5px;width:100%;}/* Rate */.kune-RatePanel-Label{white-space:nowrap;vertical-align:middle;}.kune-RatePanel-Stars{margin-left:5px;vertical-align:middle;}.kune-RatePanel-Stars-RateIt{cursor:pointer;}/* Licenses */.kune-License-CC-Header{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}.kune-License-CC-Header .gwt-Label{color:#15428B;font-weight:700;font-size:85%;margin-top:5px;}/* Theme */.kune-IconBottomPanel .gwt-MenuItem{cursor:pointer;background-color:#FFF;margin:2px 2px 2px 5px;}.kune-IconBottomPanel .gwt-MenuItem-selected{background-color:#F2F2F2;}.gwt-MenuBar-bottomMenu{margin-left:-60px;margin-top:-120px;}/* i18n */.kune-I18nTranslatorCell{white-space:normal;}.kune-i18nTranslator-recommend{margin:10px;}.kune-i18nTranslator-recommend h1{font-size:131%;font-weight:700;}.kune-i18nTranslator-recommend h2{font-size:116%;font-weight:700;}.kune-i18nTranslator-recommend h3{font-size:108%;font-weight:700;font-style:italic;}.kune-i18nTranslator-recommend em{font-weight:700;}.kune-i18nTranslator-recommend strong{font-weight:700;}/* Admin Context */.kune-AdminContextPanel{margin:6px;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem{background:transparent url(img/arrow-right-white.gif) no-repeat scroll 3px 2px;cursor:pointer;padding:3px 10px 1px 20px;overflow:hidden;width:100%;}.kune-AdminContextPanel .gwt-StackPanelItem img{margin:0 0 0 3px;vertical-align:middle;}.kune-AdminContextPanel .gwt-StackPanelItem-selected{background:transparent url(img/arrow-down-white.gif) no-repeat scroll 3px 2px;background-color:#DEE3DB;}.kune-AdminContextPanelLink{background-color:#E6E6E6;border-top:1px solid #CCC;border-bottom:1px solid #F2F2F2;/* white-space: nowrap; */cursor:pointer;}.kune-AdminContextPanel-inner{background-color:#FFF;}.kune-AdminContextPanel-inner-wrap{margin:5px;}.kune-EditableLabel{}.kune-EditableLabel .kune-EditableLabel-editable{}.kune-EditableLabel-high{background-color:#FFFBC1;cursor:pointer;}.kune-EditableLabel-high span{background-color:#FFFBC1;}.kune-EditableLabel a{margin-left:5px;}.kune-EditableLabel a:link{color:green;}.kune-EditableLabel a:hover{text-decoration:underline;}.kune-EditableLabel a:visited{color:olive;}.kune-EditableLabel img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable img{margin-right:4px;vertical-align:middle;}.kune-EditableLabel-editable span{margin:3px;}.kune-EditableLabel span{margin:3px;}.kune-BottomIconsTrayPanel{width:165px;height:21px;vertical-align:middle;background-color:#EFEFEF;}.kune-TagsPanel-tag{float:left;margin-right:5px;cursor:pointer;}.kune-Content-Main{margin:5px;}/* Yahoo ui base.css */.kune-Content-Main h1{font-size:138.5%;}.kune-Content-Main h2{font-size:123.099998%;}.kune-Content-Main h3{font-size:108%;}.kune-Content-Main h1{margin:1em 0;}.kune-Content-Main h2{margin:1em 0;}.kune-Content-Main h3{margin:1em 0;}.kune-Content-Main h1{font-weight:700;}.kune-Content-Main h2{font-weight:700;}.kune-Content-Main h3{font-weight:700;}.kune-Content-Main h4{font-weight:700;}.kune-Content-Main h5{font-weight:700;}.kune-Content-Main h6{font-weight:700;}.kune-Content-Main strong{font-weight:700;}.kune-Content-Main abbr{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main acronym{border-bottom:1px dotted #000;cursor:help;}.kune-Content-Main em{font-style:italic;}.kune-Content-Main blockquote{margin:1em;}.kune-Content-Main ul{margin:1em;}.kune-Content-Main ol{margin:1em;}.kune-Content-Main dl{margin:1em;}.kune-Content-Main ol{margin-left:2em;}.kune-Content-Main ul{margin-left:2em;}.kune-Content-Main dl{margin-left:2em;}.kune-Content-Main ol{list-style:decimal outside;}.kune-Content-Main li{list-style:decimal outside;}.kune-Content-Main li{list-style:disc outside;}.kune-Content-Main ul{list-style:disc outside;}.kune-Content-Main dl{margin-left:1em;}.kune-Content-Main dd{margin-left:1em;}.kune-Content-Main th{border:1px solid #000;padding:.5em;font-weight:700;text-align:center;}.kune-Content-Main td{border:1px solid #000;padding:.5em;}.kune-Content-Main caption{margin-bottom:.5em;text-align:center;}.kune-Content-Main p{margin-bottom:1em;}.kune-Content-Main fieldset{margin-bottom:1em;}.kune-Content-Main table{margin-bottom:1em;}.kune-Content-Main pre{margin-bottom:1em;}.kune-Content-Main input[type=text]{width:12.25em;width:11.9em;}.kune-Content-Main input[type=password]{width:12.25em;width:11.9em;}.kune-Content-Main textarea{width:12.25em;width:11.9em;}.search-icon{background-image:url(img/search.gif)!important;}.i18n-icon{background-image:url(img/language.gif)!important;}/* RTE Text editor */.kune-TexEditorPanel-TextArea{margin:3px;}.gwt-RichTextArea{/* border: 1px solid #000;
- background-color: #FFF; */border:1px solid #4D4D4D;background-color:#FFF;margin:5px 0 5px 10px;}.gwt-RichTextToolbar{/* background-color: #F2F2F2;
- padding: 5px; */height:24px;vertical-align:middle;}.gwt-RichTextToolbar table{vertical-align:middle;}.gwt-RichTextToolbar .gwt-ToggleButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton{float:left;margin-top:2px;}.gwt-RichTextToolbar .gwt-PushButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-PushButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-PushButton-down{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-PushButton-down-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-up{margin-right:2px;border:1px solid #F2F2F2;}.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering{margin-right:2px;border:1px solid #C3D9FF;border-color:#E8F1FF #9daecd #9daecd #e8f1ff;}.gwt-RichTextToolbar .gwt-ToggleButton-down{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.gwt-RichTextToolbar .x-btn{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lSpace{float:left;}.gwt-RichTextToolbar .kune-Button-Large-lrSpace{float:left;}.RichTextToolbar-menu{float:left;margin-top:2px;}.RichTextToolbar-menu table{border-collapse:collapse;border-spacing:0;margin:0;}.RichTextToolbar-menu .gwt-MenuItem{margin-right:2px;border:1px solid #F2F2F2;}.RichTextToolbar-menu .gwt-MenuItem-selected{margin-right:2px;background-color:#E8F1FF;border:1px solid #C3D9FF;border-color:#9DAECD #e8f1ff #e8f1ff #9daecd;}.RichTextToolbar-submenu{background-color:#FFFCD5;border:1px solid #D38D5F;cursor:default;}.RichTextToolbar-submenu .gwt-MenuItem{cursor:default;white-space:nowrap;border:1px solid #FFFCD5;padding:0 4px;}.RichTextToolbar-submenu .gwt-MenuItem-selected{background-color:#FFB958;border:1px solid #C83737;}.kune-WebSafePalette{background-color:#FFF;border:1px solid #AAA;margin:1px;}.kune-WebSafePalette td{width:12px;height:10px;}.k-site-traybar{background:#FFF none repeat scroll 0 50%;}.k-sitebar .kune-IconHyperlink{white-space:nowrap;}.k-sitebar .kune-IconHyperlink a:link{cursor:pointer;text-decoration:underline;color:#B3B3B3;}.k-sitebar .kune-IconHyperlink a:hover{text-decoration:underline;}.k-sitebar .kune-IconHyperlink a:visited{color:#B3B3B3;}.k-sitebar-labellink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-sitebar{margin-right:10px;height:16px;}.k-sitebar .gwt-TextBox{border:1px solid #E4A374;margin:0 15px 0 3px;padding-left:3px;color:#B3B3B3;}.k-sitebar .gwt-Hyperlink a{white-space:nowrap;color:#B3B3B3;text-decoration:underline;cursor:pointer;}.k-sitebar .gwt-PushButton{cursor:pointer;}.k-sitebar-LabelLink{white-space:nowrap;color:#B3B3B3;cursor:pointer;text-decoration:underline;}.k-entity-summary{border-left-color:#FFF;border-left-width:5px;}.k-entitytextlogo{border:2px solid #F2F2F2;height:60px;margin:0 0 4px -1px;overflow:hidden;width:468px;}.k-entitytextlogo .gwt-Label{font-size:167%;font-weight:700;margin:5px;height:27px;}.k-entitytextlogo-default .gwt-Label{color:#69312F;}.k-entitytextlogo-green .gwt-Label{color:#250;}.k-entitytextlogo-blue .gwt-Label{color:navy;}.k-entitytextlogo-grey .gwt-Label{color:#1A1A1A;}.k-entitytextlogo-purple .gwt-Label{color:#405;}.k-entitytextlogo-red .gwt-Label{color:maroon;}.k-entitytextlogo .gwt-Hyperlink a{color:#CCC;font-size:85%;margin:5px;text-decoration:underline;white-space:nowrap;background-color:#FFF;}.k-entity-default .x-layout-split{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-green .x-layout-split{background:#5FD35F none repeat scroll 0 50%;}.k-entity-blue .x-layout-split{background:#06F none repeat scroll 0 50%;}.k-entity-grey .x-layout-split{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-purple .x-layout-split{background:#660080 none repeat scroll 0 50%;}.k-entity-red .x-layout-split{background:#D40000 none repeat scroll 0 50%;}.k-entityworkspace .x-layout-split{background:transparent none repeat scroll 0 50%;}.k-entityworkspace-default .x-layout-split{background:#DEAA87 none repeat scroll 0 50%;}.k-entityworkspace-green .x-layout-split{background:#DCE8AB none repeat scroll 0 50%;}.k-entityworkspace-blue .x-layout-split{background:#D5D5FF none repeat scroll 0 50%;}.k-entityworkspace-grey .x-layout-split{background:#999 none repeat scroll 0 50%;}.k-entityworkspace-purple .x-layout-split{background:#A793AC none repeat scroll 0 50%;}.k-entityworkspace-red .x-layout-split{background:#F55 none repeat scroll 0 50%;}.k-entity-title{border-left-style:solid;border-left-width:2px;}.k-entity-title div{line-height:22px;white-space:nowrap;}.k-entity-subtitle{}.k-entity-subtitle div{line-height:22px;white-space:nowrap;}.k-entity-title-rd-default{background:#DD8A3D;}.k-entity-title-rd-green{background:#5FD35F;}.k-entity-title-rd-blue{background:#06F;}.k-entity-title-rd-grey{background:#4D4D4D;}.k-entity-title-rd-purple{background:#660080;}.k-entity-title-rd-red{background:#D40000;}.k-entity-title-default{background:#F1BB59 none repeat scroll 0 50%;border-left-color:#DD8A3D;}.k-entity-title-green{background:#AFA none repeat scroll 0 50%;border-left-color:#5FD35F;}.k-entity-title-blue{background:#AFDDE9 none repeat scroll 0 50%;border-left-color:#06F;}.k-entity-title-grey{background:#CCC none repeat scroll 0 50%;border-left-color:#4D4D4D;}.k-entity-title-purple{background:#DDAFE9 none repeat scroll 0 50%;border-left-color:#660080;}.k-entity-title-red{background:#FF8080 none repeat scroll 0 50%;border-left-color:#D40000;}.k-entity-title-default div{color:#69312F;}.k-entity-title-green div{color:#250;}.k-entity-title-blue div{color:navy;}.k-entity-title-grey div{color:#1A1A1A;}.k-entity-title-purple div{color:#405;}.k-entity-title-red div{color:maroon;}.k-entity-subtitle-default{background:#DD8A3D none repeat scroll 0 50%;}.k-entity-subtitle-green{background:#5FD35F none repeat scroll 0 50%;}.k-entity-subtitle-blue{background:#06F none repeat scroll 0 50%;}.k-entity-subtitle-grey{background:#4D4D4D none repeat scroll 0 50%;}.k-entity-subtitle-purple{background:#660080 none repeat scroll 0 50%;}.k-entity-subtitle-red{background:#D40000 none repeat scroll 0 50%;}.k-entity-subtitle-default div{color:#FFF;}.k-entity-subtitle-green div{color:#FFF;}.k-entity-subtitle-blue div{color:#FFF;}.k-entity-subtitle-grey div{color:#FFF;}.k-entity-subtitle-purple div{color:#FFF;}.k-entity-subtitle-red div{color:#FFF;}.k-entity-bottom-rd-default,.k-entity-bottom-default,.k-toolselectoritem-sel-default{background:#DD8A3D;}.k-entity-bottom-rd-green,.k-entity-bottom-green,.k-toolselectoritem-sel-green{background:#5FD35F;}.k-entity-bottom-rd-blue,.k-entity-bottom-blue,.k-toolselectoritem-sel-blue{background:#06F;}.k-entity-bottom-rd-grey,.k-entity-bottom-grey,.k-toolselectoritem-sel-grey{background:#4D4D4D;}.k-entity-bottom-rd-purple,.k-entity-bottom-purple,.k-toolselectoritem-sel-purple{background:#660080;}.k-entity-bottom-rd-red,.k-entity-bottom-red,.k-toolselectoritem-sel-red{background:#D40000;}.k-entitylicensepanel-licensetext{cursor:pointer;margin-left:5px;text-decoration:underline;}.k-entity-context-default div{background:#FFD09D none repeat scroll 0 50%;}.k-entity-context-green div{background:#CFA none repeat scroll 0 50%;}.k-entity-context-blue div{background:#ACF none repeat scroll 0 50%;}.k-entity-context-grey div{background:#B3B3B3 none repeat scroll 0 50%;}.k-entity-context-purple div{background:#DDAFE9 none repeat scroll 0 50%;}.k-entity-context-red div{background:#FAA none repeat scroll 0 50%;}.k-entity-bottom div{line-height:2em;color:#FFF;}.k-toolbar-top-line{border-top-color:#d0d0d0;border-top-style:solid;border-top-width:1px;}.k-toolbar-bottom-line{border-bottom-color:#d0d0d0;border-bottom-style:solid;border-bottom-width:1px;}.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{white-space:nowrap;font:normal 100% arial,sans;line-height:19px;}.k-toolbar-sep{padding-top:4px;padding-left:5px;}/* Custom gwt-ext styles */.ytb-sep{background-image:url(../js/ext/resources/images/default/grid/grid-split.gif);background-position:center;background-repeat:no-repeat;display:block;font-size:1px;height:16px;width:4px;overflow:hidden;cursor:default;margin:0 2px;border:0;}.ytb-spacer{width:2px;}.x-grid-group-hd{border-bottom:2px solid grey;cursor:pointer;padding-top:3px;}/* Drop down */.k-dropdownouter{background-color:grey;}.k-dropdownouter-members{}.k-dropdownouter-members-default{background-color:#DF5244;}.k-dropdownouter-members-green{background-color:green;}.k-dropdownouter-members-blue{background-color:#5500D4;}.k-dropdownouter-members-grey{background-color:#4D4D4D;}.k-dropdownouter-members-purple{background-color:#672178;}.k-dropdownouter-members-red{background-color:#A02C2C;}.k-dropdownouter-part{}.k-dropdownouter-part-default{background-color:#CA5842;}.k-dropdownouter-part-green{background-color:#0A0;}.k-dropdownouter-part-blue{background-color:#60F;}.k-dropdownouter-part-grey{background-color:#666;}.k-dropdownouter-part-purple{background-color:#892CA0;}.k-dropdownouter-part-red{background-color:#C83737;}.k-dropdownouter-tags{}.k-dropdownouter-tags-default{background-color:#87501E;}.k-dropdownouter-tags-green{background-color:#00D400;}.k-dropdownouter-tags-blue{background-color:#95F;}.k-dropdownouter-tags-grey{background-color:gray;}.k-dropdownouter-tags-purple{background-color:#AB37C8;}.k-dropdownouter-tags-red{background-color:#D35F5F;}.k-dropdownouter-summary{}.k-dropdownouter-summary-default{background-color:#9F734B;}.k-dropdownouter-summary-green{background-color:#4CE14C;}.k-dropdownouter-summary-blue{background-color:#69A5FF;}.k-dropdownouter-summary-grey{background-color:#A6A6A6;}.k-dropdownouter-summary-purple{background-color:#C473D8;}.k-dropdownouter-summary-red{background-color:#E08F8F;}.k-dropdowninner{margin:0 3px 1px;background:green;background-color:#FFF;/* padding: 3px; */}.k-dropdownlabel{color:#FFF;cursor:pointer;}.k-dropdownlabel .gwt-Label{margin:0 5px 0 0;width:100%;}.k-dropdownlabel img{margin:0 3px 0 1px;}/* WsTheme */.k-wstheme-icon-default{background:#FF8C00;}.k-wstheme-icon-green{background:green;}.k-wstheme-icon-blue{background:blue;}.k-wstheme-icon-grey{background:grey;}.k-wstheme-icon-purple{background:purple;}.k-wstheme-icon-red{background:red;}/* Tool selector items */.k-toolselectoritem{width:auto;margin-bottom:5px;cursor:pointer;}.k-toolselectoritem-sel{}.k-toolselectoritem-notsel-default{background:#FFE9A5;}.k-toolselectoritem-notsel-green{background:#D6F4D6;}.k-toolselectoritem-notsel-blue{background:#D7D7F4;}.k-toolselectoritem-notsel-grey{background:#E6E6E6;}.k-toolselectoritem-notsel-purple{background:#EED7F4;}.k-toolselectoritem-notsel-red{background:#FFD5D5;}.k-toolselectoritem-sel a{color:#FFF;padding:0 9px;text-decoration:none;}.k-toolselectoritem-sel a:hover{text-decoration:none;}.k-toolselectoritem-notsel{}.k-toolselectoritem-notsel a{color:#00F;padding:0 9px;text-decoration:none;}.k-toolselectoritem-notsel a:hover{text-decoration:underline;}/* others */.k-textlinethrough{text-decoration:line-through;}.k-textnormal{text-decoration:inherit;}.k-textunderline{text-decoration:underline;}
\ No newline at end of file
+*/
+.kune-NavigationBar .topBar .gwt-Image {
+ margin: 0 2px 0 5px;
+}
+
+.kune-NavigationBar .Items {
+ margin: 2px 0;
+}
+
+.kune-NavigationBar .Items .gwt-Image {
+ margin: 2px 0;
+ vertical-align: middle;
+}
+
+.kune-NavigationBar .Items .gwt-Hyperlink a {
+ color: green; /* FIXME: other color */
+}
+
+.kune-NavigationBar .topBar .topBar-margin {
+ margin-left: 5px;
+}
+
+.kune-NavigationBar .pathMenu {
+ vertical-align: middle;
+}
+
+.kune-NavigationBar .pathMenu .gwt-MenuItem {
+ background: transparent url(img/button-bg-hard.gif) repeat-x 0 0;
+ border-left: 1px solid #AAA;
+ border-right: 1px solid #AAA;
+ color: #999;
+ cursor: pointer;
+ white-space: nowrap;
+ padding: 3px 6px;
+}
+
+.kune-NavigationBar .pathMenu .gwt-MenuItem-selected {
+ background: transparent url(img/button-bg-soft.gif) repeat-x 0 0;
+ color: #000;
+}
+
+.kune-NavigationBar .kune-IconHyperlink {
+ vertical-align: middle;
+ margin-left: 5px;
+}
+
+.kune-NavigationBar .kune-IconHyperlink a {
+ color: green;
+ text-decoration: none;
+}
+
+.kune-NavigationBar .kune-IconHyperlink .gwt-Image {
+ margin-right: 3px;
+ vertical-align: middle;
+}
+
+/* Social Network */
+.kune-StackedDropDownPanel {
+
+}
+
+.kune-StackedDropDownPanel .gwt-StackPanelItem {
+ border-top: 1px solid #CCC;
+ border-bottom: 1px solid #CCC;
+ background-color: #EEFFAA;
+ cursor: pointer;
+ padding: 1px 3px 0 6px;
+ overflow: hidden;
+}
+
+.kune-StackedDropDownPanel .gwt-StackPanelItem img {
+ margin: 0 0 0 3px;
+ vertical-align: middle;
+}
+
+.kune-StackedDropDownPanel .kune-DropDownInner table {
+ width: 100%;
+}
+
+.kune-StackedDropDownPanel .gwt-StackPanelItem-selected {
+
+}
+
+.kune-StackedDropDownPanelLink {
+ background-color: #E6E6E6;
+ border-top: 1px solid #CCC;
+ border-bottom: 1px solid #F2F2F2;
+/* white-space: nowrap; */
+ cursor: pointer;
+}
+
+.kune-StackedDropDownPanel .kune-DropDownInner {
+ padding: 0px;
+}
+
+/* StackedDropDownPanel Members */
+.kune-StackSubItemLabel {
+ overflow: hidden;
+}
+
+.kune-StackSubItemLabel .gwt-MenuItem {
+ white-space: nowrap;
+ cursor: pointer;
+ border-bottom: 1px solid #F2F2F2;
+}
+
+.kune-StackSubItemLabel table {
+ width: 100%;
+}
+
+.kune-StackSubItemLabel .gwt-MenuItem img {
+ vertical-align: middle;
+ margin-top: 1px;
+ margin-bottom: 1px;
+ margin-left: 5px;
+ margin-right: 3px;
+}
+
+.kune-StackSubItemLabel .gwt-MenuItem-selected {
+ background-color: #FFE6D5;
+}
+
+.kune-StackSubItemActions {
+ background-color: #F2F2F2;
+ border: 1px solid #999;
+ vertical-align: middle;
+ padding: 5px 0;
+ margin-left: -120px;
+ margin-top: -2px;
+}
+
+.kune-StackSubItemActions .gwt-MenuItem {
+ cursor: pointer;
+ padding: 1px 10px;
+ white-space: nowrap;
+}
+
+.kune-StackSubItemActions .gwt-MenuItem img {
+ vertical-align: middle;
+ margin-right: 3px;
+}
+
+.kune-StackSubItemActions .gwt-MenuItem-selected {
+ background-color: #FFB958;
+}
+
+/* AccessList */
+.kune-AccessListSubLabel {
+ font-style: italic;
+}
+
+.kune-AccessList {
+ margin: 5px;
+ width: 100%;
+}
+
+.kune-AccessList .gwt-DisclosurePanel {
+ margin: 5px;
+ width: 100%;
+}
+
+.kune-AccessList .gwt-DisclosurePanel-open {
+ width: 100%;
+}
+
+.kune-AccessList .gwt-DisclosurePanel-closed {
+ width: 100%;
+}
+
+.kune-AccessList .header {
+ margin: 0 0 3px 0;
+ text-decoration: none;
+ width: 100%;
+ background-color: #8DD35F;
+}
+
+.kune-AccessList .header table {
+ margin: 0 5px 0 0;
+ width: 100%;
+ color: #FFF;
+}
+
+.kune-AccessList .header img {
+ margin: 0 3px 0 0;
+}
+
+.kune-AccessList .content {
+ margin: 0 0 0 7px;
+ width: 100%;
+}
+
+.kune-AccessList .content table {
+ margin-bottom: 5px;
+ width: 100%;
+}
+
+/* Rate */
+.kune-RatePanel-Label {
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.kune-RatePanel-Stars {
+ margin-left: 5px;
+ vertical-align: middle;
+}
+
+.kune-RatePanel-Stars-RateIt {
+ cursor: pointer;
+}
+
+/* Licenses */
+.kune-License-CC-Header {
+ color: #15428B;
+ font-weight: bold;
+ font-size: 85%;
+ margin-top: 5px;
+}
+
+.kune-License-CC-Header .gwt-Label {
+ color: #15428B;
+ font-weight: bold;
+ font-size: 85%;
+ margin-top: 5px;
+}
+
+/* Theme */
+.kune-IconBottomPanel .gwt-MenuItem {
+ cursor: pointer;
+ background-color: #FFF;
+ margin: 2px 2px 2px 5px;
+}
+
+.kune-IconBottomPanel .gwt-MenuItem-selected {
+ background-color: #F2F2F2;
+}
+
+.gwt-MenuBar-bottomMenu {
+ margin-left: -60px;
+ margin-top: -120px;
+}
+
+/* i18n */
+.kune-I18nTranslatorCell {
+ white-space: normal;
+}
+
+.kune-i18nTranslator-recommend {
+ margin: 10px;
+}
+
+.kune-i18nTranslator-recommend h1 {
+ font-size: 131%;
+ font-weight: bold;
+}
+
+.kune-i18nTranslator-recommend h2 {
+ font-size: 116%;
+ font-weight: bold;
+}
+
+.kune-i18nTranslator-recommend h3 {
+ font-size: 108%;
+ font-weight: bold;
+ font-style: italic;
+}
+
+.kune-i18nTranslator-recommend em {
+ font-weight: bold;
+}
+
+.kune-i18nTranslator-recommend strong {
+ font-weight: bold;
+}
+
+/* Admin Context */
+.kune-AdminContextPanel {
+ margin: 6px;
+ width: 100%;
+}
+
+.kune-AdminContextPanel .gwt-StackPanelItem {
+ background: transparent url(img/arrow-right-white.gif) no-repeat scroll 3px 2px;
+ cursor: pointer;
+ padding: 3px 10px 1px 20px;
+ overflow: hidden;
+ width: 100%;
+}
+
+.kune-AdminContextPanel .gwt-StackPanelItem img {
+ margin: 0 0 0 3px;
+ vertical-align: middle;
+}
+
+.kune-AdminContextPanel .gwt-StackPanelItem-selected {
+ background: transparent url(img/arrow-down-white.gif) no-repeat scroll 3px 2px;
+ background-color: #DEE3DB;
+}
+
+.kune-AdminContextPanelLink {
+ background-color: #E6E6E6;
+ border-top: 1px solid #CCC;
+ border-bottom: 1px solid #F2F2F2;
+ /* white-space: nowrap; */
+ cursor: pointer;
+}
+
+.kune-AdminContextPanel-inner {
+ background-color: #FFF;
+}
+
+.kune-AdminContextPanel-inner-wrap {
+ margin: 5px;
+}
+
+.kune-EditableLabel {
+
+}
+
+.kune-EditableLabel .kune-EditableLabel-editable {
+
+}
+
+.kune-EditableLabel-high {
+ background-color: #FFFBC1;
+ cursor: pointer;
+}
+
+.kune-EditableLabel-high span {
+ background-color: #FFFBC1;
+}
+
+.kune-EditableLabel a {
+ margin-left: 5px;
+}
+
+.kune-EditableLabel a:link {
+ color: green;
+}
+
+.kune-EditableLabel a:hover {
+ text-decoration: underline;
+}
+
+.kune-EditableLabel a:visited {
+ color: #808000;
+}
+
+.kune-EditableLabel img {
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+.kune-EditableLabel-editable img {
+ margin-right: 4px;
+ vertical-align: middle;
+}
+
+.kune-EditableLabel-editable span {
+ margin: 3px;
+}
+
+.kune-EditableLabel span {
+ margin: 3px;
+}
+
+.kune-BottomIconsTrayPanel {
+ width: 165px;
+ height: 21px;
+ vertical-align: middle;
+ background-color: #EFEFEF;
+}
+
+.kune-TagsPanel-tag {
+ float: left;
+ margin-right: 5px;
+ cursor: pointer;
+}
+
+.kune-Content-Main {
+ margin: 5px;
+}
+
+/* Yahoo ui base.css */
+
+.kune-Content-Main h1 {
+ font-size: 138.5%;
+}
+
+.kune-Content-Main h2 {
+ font-size: 123.1%;
+}
+
+.kune-Content-Main h3 {
+ font-size: 108%;
+}
+
+.kune-Content-Main h1 {
+ margin: 1em 0;
+}
+
+.kune-Content-Main h2 {
+ margin: 1em 0;
+}
+
+.kune-Content-Main h3 {
+ margin: 1em 0;
+}
+
+.kune-Content-Main h1 {
+ font-weight: bold;
+}
+
+.kune-Content-Main h2 {
+ font-weight: bold;
+}
+
+.kune-Content-Main h3 {
+ font-weight: bold;
+}
+
+.kune-Content-Main h4 {
+ font-weight: bold;
+}
+
+.kune-Content-Main h5 {
+ font-weight: bold;
+}
+
+.kune-Content-Main h6 {
+ font-weight: bold;
+}
+
+.kune-Content-Main strong {
+ font-weight: bold;
+}
+
+.kune-Content-Main abbr {
+ border-bottom: 1px dotted #000;
+ cursor: help;
+}
+
+.kune-Content-Main acronym {
+ border-bottom: 1px dotted #000;
+ cursor: help;
+}
+
+.kune-Content-Main em {
+ font-style: italic;
+}
+
+.kune-Content-Main blockquote {
+ margin: 1em;
+}
+
+.kune-Content-Main ul {
+ margin: 1em;
+}
+
+.kune-Content-Main ol {
+ margin: 1em;
+}
+
+.kune-Content-Main dl {
+ margin: 1em;
+}
+
+.kune-Content-Main ol {
+ margin-left: 2em;
+}
+
+.kune-Content-Main ul {
+ margin-left: 2em;
+}
+
+.kune-Content-Main dl {
+ margin-left: 2em;
+}
+
+.kune-Content-Main ol {
+ list-style: decimal outside;
+}
+
+.kune-Content-Main li {
+ list-style: decimal outside;
+}
+
+.kune-Content-Main li {
+ list-style: disc outside;
+}
+
+.kune-Content-Main ul {
+ list-style: disc outside;
+}
+
+
+.kune-Content-Main dl {
+ margin-left: 1em;
+}
+
+.kune-Content-Main dd {
+ margin-left: 1em;
+}
+
+.kune-Content-Main th {
+ border: 1px solid #000;
+ padding: .5em;
+ font-weight: bold;
+ text-align: center;
+}
+
+.kune-Content-Main td {
+ border: 1px solid #000;
+ padding: .5em;
+}
+
+.kune-Content-Main caption {
+ margin-bottom: .5em;
+ text-align: center;
+}
+
+.kune-Content-Main p {
+ margin-bottom: 1em;
+}
+
+.kune-Content-Main fieldset {
+ margin-bottom: 1em;
+}
+.kune-Content-Main table {
+ margin-bottom: 1em;
+}
+
+.kune-Content-Main pre {
+ margin-bottom: 1em;
+}
+
+.kune-Content-Main input[type=text] {
+ width: 12.25em;*width: 11.9em;}
+
+.kune-Content-Main input[type=password] {
+ width: 12.25em;*width: 11.9em;}
+
+.kune-Content-Main textarea {width: 12.25em;*width: 11.9em;}
+
+.search-icon {
+ background-image: url(img/search.gif) !important;
+}
+
+.i18n-icon {
+ background-image: url(img/language.gif) !important;
+}
+
+
+
+
+/* RTE Text editor */
+.kune-TexEditorPanel-TextArea {
+ margin: 3px;
+}
+
+.gwt-RichTextArea { /* border: 1px solid #000;
+ background-color: #FFF; */
+ border: 1px solid #4D4D4D;
+ background-color: #FFF;
+ margin: 5px 0px 5px 10px;
+}
+
+.gwt-RichTextToolbar {
+ /* background-color: #F2F2F2;
+ padding: 5px; */
+ height: 24px;
+ vertical-align: middle;
+}
+
+.gwt-RichTextToolbar table {
+ vertical-align: middle;
+}
+
+.gwt-RichTextToolbar .gwt-ToggleButton {
+ float: left;
+ margin-top: 2px;
+}
+
+.gwt-RichTextToolbar .gwt-PushButton {
+ float: left;
+ margin-top: 2px;
+}
+
+.gwt-RichTextToolbar .gwt-PushButton-up {
+ margin-right: 2px;
+ border: 1px solid #F2F2F2;
+}
+
+.gwt-RichTextToolbar .gwt-PushButton-up-hovering {
+ margin-right: 2px;
+ border: 1px solid #C3D9FF;
+ border-color: #E8F1FF #9daecd #9daecd #e8f1ff;
+}
+
+.gwt-RichTextToolbar .gwt-PushButton-down {
+ margin-right: 2px;
+ border: 1px solid #C3D9FF;
+ border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
+}
+
+.gwt-RichTextToolbar .gwt-PushButton-down-hovering {
+ margin-right: 2px;
+ border: 1px solid #C3D9FF;
+ border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
+}
+
+.gwt-RichTextToolbar .gwt-ToggleButton-up {
+ margin-right: 2px;
+ border: 1px solid #F2F2F2;
+}
+
+.gwt-RichTextToolbar .gwt-ToggleButton-up-hovering {
+ margin-right: 2px;
+ border: 1px solid #C3D9FF;
+ border-color: #E8F1FF #9daecd #9daecd #e8f1ff;
+}
+
+.gwt-RichTextToolbar .gwt-ToggleButton-down {
+ margin-right: 2px;
+ background-color: #E8F1FF;
+ border: 1px solid #C3D9FF;
+ border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
+}
+
+.gwt-RichTextToolbar .gwt-ToggleButton-down-hovering {
+ margin-right: 2px;
+ background-color: #E8F1FF;
+ border: 1px solid #C3D9FF;
+ border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
+}
+
+.gwt-RichTextToolbar .x-btn {
+ float: left;
+}
+
+.gwt-RichTextToolbar .kune-Button-Large-lSpace {
+ float: left;
+}
+
+.gwt-RichTextToolbar .kune-Button-Large-lrSpace {
+ float: left;
+}
+
+.RichTextToolbar-menu {
+ float: left;
+ margin-top: 2px;
+}
+
+.RichTextToolbar-menu table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin: 0;
+}
+
+.RichTextToolbar-menu .gwt-MenuItem {
+ margin-right: 2px;
+ border: 1px solid #F2F2F2;
+}
+
+.RichTextToolbar-menu .gwt-MenuItem-selected {
+ margin-right: 2px;
+ background-color: #E8F1FF;
+ border: 1px solid #C3D9FF;
+ border-color: #9DAECD #e8f1ff #e8f1ff #9daecd;
+}
+
+.RichTextToolbar-submenu {
+ background-color: #FFFCD5;
+ border: 1px solid #D38D5F;
+ cursor: default;
+}
+
+.RichTextToolbar-submenu .gwt-MenuItem {
+ cursor: default;
+ white-space: nowrap;
+ border: 1px solid #FFFCD5;
+ padding: 0 4px;
+}
+
+.RichTextToolbar-submenu .gwt-MenuItem-selected {
+ background-color: #FFB958;
+ border: 1px solid #C83737;
+}
+
+.kune-WebSafePalette {
+ background-color: #FFF;
+ border: 1px solid #AAA;
+ margin: 1px;
+}
+
+.kune-WebSafePalette td {
+ width: 12px;
+ height: 10px;
+}
+
+
+.k-site-traybar {
+ background: #FFF none repeat scroll 0% 50%;
+}
+
+.k-sitebar .kune-IconHyperlink {
+ white-space: nowrap;
+}
+
+.k-sitebar .kune-IconHyperlink a:link {
+ cursor: pointer;
+ text-decoration: underline;
+ color: #B3B3B3;
+}
+
+.k-sitebar .kune-IconHyperlink a:hover {
+ text-decoration: underline;
+}
+
+.k-sitebar .kune-IconHyperlink a:visited {
+ color: #B3B3B3;
+}
+
+.k-sitebar-labellink {
+ white-space: nowrap;
+ color: #B3B3B3;
+ cursor: pointer;
+ text-decoration: underline;
+}
+
+.k-sitebar {
+ margin-right: 10px;
+ height: 16px;
+}
+
+.k-sitebar .gwt-TextBox {
+ border: 1px solid #E4A374;
+ margin: 0 15px 0 3px;
+ padding-left: 3px;
+ color: #B3B3B3;
+}
+
+.k-sitebar .gwt-Hyperlink a {
+ white-space: nowrap;
+ color: #B3B3B3;
+ text-decoration: underline;
+ cursor: pointer;
+}
+
+.k-sitebar .gwt-PushButton {
+ cursor: pointer;
+}
+
+.k-sitebar-LabelLink {
+ white-space: nowrap;
+ color: #B3B3B3;
+ cursor: pointer;
+ text-decoration: underline;
+}
+
+.k-entity-summary {
+ border-left-color: #FFF;
+ border-left-width: 5px;
+}
+
+.k-entitytextlogo {
+ border: 2px solid #F2F2F2;
+ height: 60px;
+ margin: 0 0 4px -1px;
+ overflow: hidden;
+ width: 468px;
+}
+
+.k-entitytextlogo .gwt-Label {
+ font-size: 167%;
+ font-weight: 700;
+ margin: 5px;
+ height: 27px;
+}
+
+.k-entitytextlogo-default .gwt-Label {
+ color: #69312F;
+}
+
+.k-entitytextlogo-green .gwt-Label {
+ color: #250;
+}
+
+.k-entitytextlogo-blue .gwt-Label {
+ color: #000080;
+}
+
+.k-entitytextlogo-grey .gwt-Label {
+ color: #1A1A1A;
+}
+
+.k-entitytextlogo-purple .gwt-Label {
+ color: #440055;
+}
+
+.k-entitytextlogo-red .gwt-Label {
+ color: #800000;
+}
+
+.k-entitytextlogo .gwt-Hyperlink a {
+ color: #CCC;
+ font-size: 85%;
+ margin: 5px;
+ text-decoration: underline;
+ white-space: nowrap;
+ background-color: #FFF;
+}
+
+.k-entity-default .x-layout-split {
+ background: #DD8A3D none repeat scroll 0% 50%;
+}
+
+.k-entity-green .x-layout-split {
+ background: #5FD35F none repeat scroll 0% 50%;
+}
+
+.k-entity-blue .x-layout-split {
+ background: #0066FF none repeat scroll 0% 50%;
+}
+
+.k-entity-grey .x-layout-split {
+ background: #4D4D4D none repeat scroll 0% 50%;
+}
+
+.k-entity-purple .x-layout-split {
+ background: #660080 none repeat scroll 0% 50%;
+}
+
+.k-entity-red .x-layout-split {
+ background: #D40000 none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace .x-layout-split {
+ background: transparent none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace-default .x-layout-split {
+ background: #DEAA87 none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace-green .x-layout-split {
+ background: #DCE8AB none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace-blue .x-layout-split {
+ background: #D5D5FF none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace-grey .x-layout-split {
+ background: #999999 none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace-purple .x-layout-split {
+ background: #A793AC none repeat scroll 0% 50%;
+}
+
+.k-entityworkspace-red .x-layout-split {
+ background: #FF5555 none repeat scroll 0% 50%;
+}
+
+.k-entity-title {
+ border-left-style: solid;
+ border-left-width: 2px;
+}
+
+.k-entity-title div {
+ line-height: 22px;
+ white-space: nowrap;
+}
+
+.k-entity-subtitle {
+}
+
+.k-entity-subtitle div {
+ line-height: 22px;
+ white-space: nowrap;
+}
+
+.k-entity-title-rd-default {
+ background: #DD8A3D;
+}
+
+.k-entity-title-rd-green {
+ background: #5FD35F;
+}
+
+.k-entity-title-rd-blue {
+ background: #0066FF;
+}
+
+.k-entity-title-rd-grey {
+ background: #4D4D4D;
+}
+
+.k-entity-title-rd-purple {
+ background: #660080;
+}
+
+.k-entity-title-rd-red {
+ background: #D40000;
+}
+
+.k-entity-title-default {
+ background: #F1BB59 none repeat scroll 0% 50%;
+ border-left-color: #DD8A3D;
+}
+
+.k-entity-title-green {
+ background: #AFA none repeat scroll 0% 50%;
+ border-left-color: #5FD35F;
+}
+
+.k-entity-title-blue {
+ background: #AFDDE9 none repeat scroll 0% 50%;
+ border-left-color: #0066FF;
+}
+
+.k-entity-title-grey {
+ background: #CCCCCC none repeat scroll 0% 50%;
+ border-left-color: #4D4D4D;
+}
+
+.k-entity-title-purple {
+ background: #DDAFE9 none repeat scroll 0% 50%;
+ border-left-color: #660080;
+}
+
+.k-entity-title-red {
+ background: #FF8080 none repeat scroll 0% 50%;
+ border-left-color: #D40000;
+}
+
+.k-entity-title-default div {
+ color: #69312F;
+}
+
+.k-entity-title-green div {
+ color: #250;
+}
+
+.k-entity-title-blue div {
+ color: #000080;
+}
+
+.k-entity-title-grey div {
+ color: #1A1A1A;
+}
+
+.k-entity-title-purple div {
+ color: #440055;
+}
+
+.k-entity-title-red div {
+ color: #800000;
+}
+
+.k-entity-subtitle-default {
+ background: #DD8A3D none repeat scroll 0% 50%;
+}
+
+.k-entity-subtitle-green {
+ background: #5FD35F none repeat scroll 0% 50%;
+}
+
+.k-entity-subtitle-blue {
+ background: #0066FF none repeat scroll 0% 50%;
+}
+
+.k-entity-subtitle-grey {
+ background: #4D4D4D none repeat scroll 0% 50%;
+}
+
+.k-entity-subtitle-purple {
+ background: #660080 none repeat scroll 0% 50%;
+}
+
+.k-entity-subtitle-red {
+ background: #D40000 none repeat scroll 0% 50%;
+}
+
+.k-entity-subtitle-default div {
+ color: #FFF;
+}
+
+.k-entity-subtitle-green div {
+ color: #FFF;
+}
+
+.k-entity-subtitle-blue div {
+ color: #FFF;
+}
+
+.k-entity-subtitle-grey div {
+ color: #FFF;
+}
+
+.k-entity-subtitle-purple div {
+ color: #FFF;
+}
+
+.k-entity-subtitle-red div {
+ color: #FFF;
+}
+
+.k-entity-bottom-rd-default, .k-entity-bottom-default, .k-toolselectoritem-sel-default {
+ background: #DD8A3D;
+}
+
+.k-entity-bottom-rd-green, .k-entity-bottom-green, .k-toolselectoritem-sel-green {
+ background: #5FD35F;
+}
+
+.k-entity-bottom-rd-blue, .k-entity-bottom-blue, .k-toolselectoritem-sel-blue {
+ background: #0066FF;
+}
+
+.k-entity-bottom-rd-grey, .k-entity-bottom-grey, .k-toolselectoritem-sel-grey {
+ background: #4D4D4D;
+}
+
+.k-entity-bottom-rd-purple, .k-entity-bottom-purple, .k-toolselectoritem-sel-purple {
+ background: #660080;
+}
+
+.k-entity-bottom-rd-red, .k-entity-bottom-red, .k-toolselectoritem-sel-red {
+ background: #D40000;
+}
+
+.k-entitylicensepanel-licensetext {
+ cursor: pointer;
+ margin-left: 5px;
+ text-decoration: underline;
+}
+
+.k-entity-context-default div {
+ background: #FFD09D none repeat scroll 0% 50%;
+}
+
+.k-entity-context-green div {
+ background: #CFA none repeat scroll 0% 50%;
+}
+
+.k-entity-context-blue div {
+ background: #AACCFF none repeat scroll 0% 50%;
+}
+
+.k-entity-context-grey div {
+ background: #B3B3B3 none repeat scroll 0% 50%;
+}
+
+.k-entity-context-purple div {
+ background: #DDAFE9 none repeat scroll 0% 50%;
+}
+
+.k-entity-context-red div {
+ background: #FFAAAA none repeat scroll 0% 50%;
+}
+
+.k-entity-bottom div {
+ line-height: 2em;
+ color: #FFF;
+}
+
+.k-toolbar-top-line {
+ border-top-color: rgb( 208, 208, 208 );
+ border-top-style: solid;
+ border-top-width: 1px;
+}
+
+.k-toolbar-bottom-line {
+ border-bottom-color: rgb( 208, 208, 208 );
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+}
+
+.x-toolbar td, .x-toolbar span, .x-toolbar input, .x-toolbar div, .x-toolbar select, .x-toolbar label {
+ white-space: nowrap;
+ font: normal 100% arial,sans;
+ line-height: 19px;
+}
+
+.k-toolbar-sep {
+ padding-top: 4px;
+ padding-left: 5px;
+}
+/* Custom gwt-ext styles */
+.ytb-sep {
+ background-image: url(../js/ext/resources/images/default/grid/grid-split.gif);
+ 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;
+}
+
+.ytb-spacer {
+ width: 2px;
+}
+
+.x-grid-group-hd {
+ border-bottom: 2px solid grey;
+ cursor: pointer;
+ padding-top: 3px;
+}
+/* Drop down */
+.k-dropdownouter {
+ background-color: grey;
+}
+
+.k-dropdownouter-members {
+}
+
+.k-dropdownouter-members-default {
+ background-color: #DF5244;
+}
+
+.k-dropdownouter-members-green {
+ background-color: #008000;
+}
+
+.k-dropdownouter-members-blue {
+ background-color: #5500D4;
+}
+
+.k-dropdownouter-members-grey {
+ background-color: #4D4D4D;
+}
+
+.k-dropdownouter-members-purple {
+ background-color: #672178;
+}
+
+.k-dropdownouter-members-red {
+ background-color: #A02C2C;
+}
+
+.k-dropdownouter-part {
+}
+
+.k-dropdownouter-part-default {
+ background-color: #CA5842;
+}
+
+.k-dropdownouter-part-green {
+ background-color: #00AA00;
+}
+
+.k-dropdownouter-part-blue {
+ background-color: #6600FF;
+}
+
+.k-dropdownouter-part-grey {
+ background-color: #666666;
+}
+
+.k-dropdownouter-part-purple {
+ background-color: #892CA0;
+}
+
+.k-dropdownouter-part-red {
+ background-color: #C83737;
+}
+
+.k-dropdownouter-tags {
+}
+
+.k-dropdownouter-tags-default {
+ background-color: #87501E;
+}
+
+.k-dropdownouter-tags-green {
+ background-color: #00D400;
+}
+
+.k-dropdownouter-tags-blue {
+ background-color: #9955FF;
+}
+
+.k-dropdownouter-tags-grey {
+ background-color: #808080;
+}
+
+.k-dropdownouter-tags-purple {
+ background-color: #AB37C8;
+}
+
+.k-dropdownouter-tags-red {
+ background-color: #D35F5F;
+}
+
+.k-dropdownouter-summary {
+}
+
+.k-dropdownouter-summary-default {
+ background-color: #9F734B;
+}
+
+.k-dropdownouter-summary-green {
+ background-color: #4CE14C;
+}
+
+.k-dropdownouter-summary-blue {
+ background-color: #69A5FF;
+}
+
+.k-dropdownouter-summary-grey {
+ background-color: #A6A6A6;
+}
+
+.k-dropdownouter-summary-purple {
+ background-color: #C473D8;
+}
+
+.k-dropdownouter-summary-red {
+ background-color: #E08F8F;
+}
+
+.k-dropdowninner {
+ margin: 0 3px 1px 3px;
+ background: green;
+ background-color: #FFF;
+ /* padding: 3px; */
+}
+
+.k-dropdownlabel {
+ color: #FFF;
+ cursor: pointer;
+}
+
+.k-dropdownlabel .gwt-Label {
+ margin: 0 5px 0 0;
+ width: 100%;
+}
+
+.k-dropdownlabel img {
+ margin: 0 3px 0 1px;
+}
+/* WsTheme */
+.k-wstheme-icon-default {
+ background: #FF8C00;
+}
+
+.k-wstheme-icon-green {
+ background: green;
+}
+
+.k-wstheme-icon-blue {
+ background: blue;
+}
+
+.k-wstheme-icon-grey {
+ background: grey;
+}
+
+.k-wstheme-icon-purple {
+ background: purple;
+}
+
+.k-wstheme-icon-red {
+ background: red;
+}
+
+/* Tool selector items */
+
+.k-toolselectoritem {
+ width: auto;
+ margin-bottom: 5px;
+ cursor: pointer;
+}
+
+.k-toolselectoritem-sel {
+}
+
+.k-toolselectoritem-notsel-default {
+ background: #FFE9A5;
+}
+
+.k-toolselectoritem-notsel-green {
+ background: #D6F4D6;
+}
+
+.k-toolselectoritem-notsel-blue {
+ background: #D7D7F4;
+}
+
+.k-toolselectoritem-notsel-grey {
+ background: #E6E6E6;
+}
+
+.k-toolselectoritem-notsel-purple {
+ background: #EED7F4;
+}
+
+.k-toolselectoritem-notsel-red {
+ background: #FFD5D5;
+}
+
+.k-toolselectoritem-sel a {
+ color: #FFF;
+ padding: 0 9px;
+ text-decoration: none;
+}
+
+.k-toolselectoritem-sel a:hover {
+ text-decoration: none;
+}
+
+.k-toolselectoritem-notsel {
+}
+
+.k-toolselectoritem-notsel a {
+ color: #0000FF;
+ padding: 0 9px;
+ text-decoration: none;
+}
+
+.k-toolselectoritem-notsel a:hover {
+ text-decoration: underline;
+}
+
+/* others */
+.k-textlinethrough {
+ text-decoration: line-through;
+ color: red;
+}
+
+.k-textnormal {
+ text-decoration: inherit;
+ color: green;
+}
+
+.k-textunderline {
+ text-decoration: underline;
+ color: gray;
+}
+
+
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2008-09-22 11:53:01 UTC (rev 878)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/kune-new.css 2008-09-23 11:57:19 UTC (rev 879)
@@ -630,12 +630,15 @@
/* others */
.k-textlinethrough {
text-decoration: line-through;
+ color: red;
}
.k-textnormal {
text-decoration: inherit;
+ color: green;
}
.k-textunderline {
text-decoration: underline;
+ color: gray;
}
Modified: trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css
===================================================================
--- trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css 2008-09-22 11:53:01 UTC (rev 878)
+++ trunk/src/main/java/org/ourproject/kune/app/public/css/richtext.css 2008-09-23 11:57:19 UTC (rev 879)
@@ -1,3 +1,4 @@
+
/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
@@ -3,13 +4,28 @@
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:400;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}/*
+*/
+body{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup,sub{line-height:-1px;vertical-align:text-top;}sub{vertical-align:text-bottom;}input, textarea, select{font-family:inherit;font-size:inherit;font-weight:inherit;}
+
+/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.3.1
-*/body{font:13px/1.22 arial,helvetica,clean,sans-serif;font-size:small;font:x-small;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;font-size:108%;line-height:99%;}/*
+*/
+body {font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:99%;}
+
+
+/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.4.1
-*/h1{font-size:138.5%;}h2{font-size:123.099998%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:700;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:700;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;width:11.9em;}body{font-family:arial, sans;margin:5px;}
\ No newline at end of file
+*/
+h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:bold;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;} em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
+
+
+body {
+ font-family: arial, sans;
+ margin: 5px;
+}
+
1
0
Author: danigb
Date: 2008-09-22 13:53:01 +0200 (Mon, 22 Sep 2008)
New Revision: 878
Added:
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
Modified:
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
Log:
Document Client Actions refactorization
Added: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-22 11:28:17 UTC (rev 877)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientActions.java 2008-09-22 11:53:01 UTC (rev 878)
@@ -0,0 +1,281 @@
+package org.ourproject.kune.docs.client;
+
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_BLOG;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_DOCUMENT;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_FOLDER;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_GALLERY;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_ROOT;
+import static org.ourproject.kune.docs.client.DocumentClientTool.TYPE_WIKI;
+
+import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
+import org.ourproject.kune.platf.client.actions.ActionDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
+import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
+import org.ourproject.kune.platf.client.actions.ActionPosition;
+import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
+import org.ourproject.kune.platf.client.dto.AccessRolDTO;
+import org.ourproject.kune.platf.client.dto.ContentDTO;
+import org.ourproject.kune.platf.client.dto.InitDataDTO;
+import org.ourproject.kune.platf.client.dto.StateDTO;
+import org.ourproject.kune.platf.client.dto.StateToken;
+import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
+import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
+import org.ourproject.kune.platf.client.state.Session;
+import org.ourproject.kune.platf.client.state.StateManager;
+import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
+import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
+import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
+import org.ourproject.kune.workspace.client.site.Site;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.calclab.suco.client.provider.Provider;
+import com.calclab.suco.client.signal.Slot;
+
+public class DocumentClientActions {
+
+ private final I18nUITranslationService i18n;
+ private final ContextNavigator contextNavigator;
+ private final Session session;
+ private final StateManager stateManager;
+ private final Provider<FileUploader> fileUploaderProvider;
+ private final ContextActionRegistry contextActionRegistry;
+ private final Provider<ContentServiceAsync> contentServiceProvider;
+
+ public DocumentClientActions(final I18nUITranslationService i18n, final ContextNavigator contextNavigator,
+ final Session session, final StateManager stateManager,
+ final Provider<ContentServiceAsync> contentServiceProvider,
+ final Provider<FileUploader> fileUploaderProvider, final ContextActionRegistry contextActionRegistry) {
+ this.i18n = i18n;
+ this.contextNavigator = contextNavigator;
+ this.session = session;
+ this.stateManager = stateManager;
+ this.contentServiceProvider = contentServiceProvider;
+ this.fileUploaderProvider = fileUploaderProvider;
+ this.contextActionRegistry = contextActionRegistry;
+
+ }
+
+ public void createActions() {
+ final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
+ i18n.t("New folder"), i18n.t("Folder"), i18n.t("New"), i18n.t("New folder"));
+ final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
+ "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("Folder"), i18n.t("New"), i18n
+ .t("New gallery"));
+ final ActionMenuDescriptor<StateToken> addWiki = createFolderAction(TYPE_WIKI, "images/nav/wiki_add.png", i18n
+ .t("New wiki"), i18n.t("Folder"), i18n.t("New"), i18n.t("wiki"));
+
+ final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
+ ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ Site.showProgressProcessing();
+ contentServiceProvider.get().addContent(session.getUserHash(),
+ session.getCurrentState().getStateToken(), i18n.t("New document"),
+ new AsyncCallbackSimple<StateDTO>() {
+ public void onSuccess(final StateDTO state) {
+ contextNavigator.setEditOnNextStateChange(true);
+ stateManager.setRetrievedState(state);
+ }
+ });
+ }
+ });
+ addDoc.setTextDescription(i18n.t("New document"));
+ addDoc.setParentMenuTitle(i18n.t("Folder"));
+ addDoc.setParentSubMenuTitle(i18n.t("New"));
+ addDoc.setIconUrl("images/nav/page_add.png");
+
+ final ActionMenuDescriptor<StateToken> delContainer = new ActionMenuDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ Site.info("Sorry, in development");
+ }
+ });
+ delContainer.setParentMenuTitle(i18n.t("Folder"));
+ delContainer.setTextDescription(i18n.t("Delete folder"));
+ delContainer.setMustBeConfirmed(true);
+ delContainer.setConfirmationTitle(i18n.t("Please confirm"));
+ delContainer.setConfirmationText(i18n.t("You will delete it and also all its contents. Are you sure?"));
+
+ final ActionMenuDescriptor<StateToken> delContent = new ActionMenuDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ contentServiceProvider.get().delContent(session.getUserHash(), token,
+ new AsyncCallbackSimple<String>() {
+ public void onSuccess(final String result) {
+ final StateToken parent = token.clone().clearDocument();
+ stateManager.gotoToken(parent);
+ }
+ });
+ }
+ });
+ delContent.setParentMenuTitle(i18n.t("Folder"));
+ delContent.setTextDescription(i18n.t("Delete document"));
+ delContent.setMustBeConfirmed(true);
+ delContent.setConfirmationTitle(i18n.t("Please confirm"));
+ delContent.setConfirmationText(i18n.t("Are you sure?"));
+
+ final ActionDescriptor<StateToken> go = new ActionDescriptor<StateToken>(AccessRolDTO.Viewer,
+ ActionPosition.itemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ stateManager.gotoToken(token);
+ }
+ });
+ go.setTextDescription(i18n.t("Open"));
+ go.setIconUrl("images/nav/go.png");
+ go.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken currentStateToken) {
+ return !contextNavigator.isSelected(currentStateToken);
+ }
+ });
+
+ final ActionDescriptor<StateToken> rename = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
+ ActionPosition.itemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ contextNavigator.editItem(stateToken);
+ }
+ });
+ rename.setTextDescription(i18n.t("Rename"));
+
+ final ActionButtonDescriptor<StateToken> goGroupHome = new ActionButtonDescriptor<StateToken>(
+ AccessRolDTO.Viewer, ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ stateManager.gotoToken(token.getGroup());
+ }
+ });
+ goGroupHome.setIconUrl("images/group-home.png");
+ goGroupHome.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken currentStateToken) {
+ final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent()
+ .getStateToken();
+ return !currentStateToken.equals(defContentToken);
+ }
+ });
+
+ final ActionMenuDescriptor<StateToken> setAsDefGroupContent = new ActionMenuDescriptor<StateToken>(
+ AccessRolDTO.Administrator, ActionPosition.itemMenu, new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ Site.showProgressProcessing();
+ contentServiceProvider.get().setAsDefaultContent(session.getUserHash(), token,
+ new AsyncCallbackSimple<ContentDTO>() {
+ public void onSuccess(final ContentDTO defContent) {
+ session.getCurrentState().getGroup().setDefaultContent(defContent);
+ Site.hideProgress();
+ Site.info(i18n.t("Document selected as the group homepage"));
+ }
+ });
+ }
+ });
+ setAsDefGroupContent.setTextDescription(i18n.t("Set this as the group default page"));
+ setAsDefGroupContent.setIconUrl("images/group-home.png");
+ setAsDefGroupContent.setEnableCondition(new ActionEnableCondition<StateToken>() {
+ public boolean mustBeEnabled(final StateToken currentStateToken) {
+ final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent()
+ .getStateToken();
+ return !contextNavigator.isSelected(defContentToken);
+ }
+ });
+
+ final ActionButtonDescriptor<StateToken> refresh = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
+ ActionPosition.topbar, new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ stateManager.reload();
+ contextNavigator.selectItem(stateToken);
+ }
+ });
+ refresh.setIconUrl("images/nav/refresh.png");
+ refresh.setToolTip(i18n.t("Refresh"));
+ refresh.setLeftSeparator(ActionButtonSeparator.fill);
+
+ final ActionDescriptor<StateToken> uploadFile = createUploadAction(i18n.t("Upload file"),
+ "images/nav/upload.png", i18n.t("Upload some files (images, PDFs, ...)"), null);
+
+ session.onInitDataReceived(new Slot<InitDataDTO>() {
+ public void onEvent(final InitDataDTO parameter) {
+ final ActionDescriptor<StateToken> uploadMedia = createUploadAction(i18n.t("Upload media"),
+ "images/nav/upload.png", i18n.t("Upload some media (images, videos)"), session
+ .getGalleryPermittedExtensions());
+ contextActionRegistry.addAction(TYPE_GALLERY, uploadMedia);
+ }
+ });
+
+ contextActionRegistry.addAction(TYPE_FOLDER, go);
+ contextActionRegistry.addAction(TYPE_FOLDER, addDoc);
+ contextActionRegistry.addAction(TYPE_FOLDER, addFolder);
+ contextActionRegistry.addAction(TYPE_FOLDER, delContainer);
+ contextActionRegistry.addAction(TYPE_FOLDER, rename);
+ contextActionRegistry.addAction(TYPE_FOLDER, goGroupHome);
+ contextActionRegistry.addAction(TYPE_FOLDER, refresh);
+ contextActionRegistry.addAction(TYPE_FOLDER, uploadFile);
+
+ contextActionRegistry.addAction(TYPE_BLOG, go);
+ contextActionRegistry.addAction(TYPE_BLOG, uploadFile);
+ contextActionRegistry.addAction(TYPE_BLOG, setAsDefGroupContent);
+ contextActionRegistry.addAction(TYPE_BLOG, refresh);
+
+ contextActionRegistry.addAction(TYPE_GALLERY, go);
+ contextActionRegistry.addAction(TYPE_GALLERY, goGroupHome);
+ contextActionRegistry.addAction(TYPE_GALLERY, refresh);
+
+ contextActionRegistry.addAction(TYPE_WIKI, go);
+ contextActionRegistry.addAction(TYPE_WIKI, goGroupHome);
+ contextActionRegistry.addAction(TYPE_WIKI, refresh);
+
+ contextActionRegistry.addAction(TYPE_ROOT, addDoc);
+ contextActionRegistry.addAction(TYPE_ROOT, addFolder);
+ contextActionRegistry.addAction(TYPE_ROOT, addGallery);
+ contextActionRegistry.addAction(TYPE_ROOT, addWiki);
+ contextActionRegistry.addAction(TYPE_ROOT, goGroupHome);
+ contextActionRegistry.addAction(TYPE_ROOT, refresh);
+ contextActionRegistry.addAction(TYPE_ROOT, uploadFile);
+
+ contextActionRegistry.addAction(TYPE_DOCUMENT, go);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, delContent);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, rename);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, refresh);
+ contextActionRegistry.addAction(TYPE_DOCUMENT, setAsDefGroupContent);
+ }
+
+ private ActionMenuDescriptor<StateToken> createFolderAction(final String contentTypeId, final String iconUrl,
+ final String textDescription, final String parentMenuTitle, final String parentMenuSubtitle,
+ final String defaultName) {
+ final ActionMenuDescriptor<StateToken> addFolder;
+ addFolder = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken stateToken) {
+ Site.showProgressProcessing();
+ contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, defaultName,
+ contentTypeId, new AsyncCallbackSimple<StateDTO>() {
+ public void onSuccess(final StateDTO state) {
+ contextNavigator.setEditOnNextStateChange(true);
+ stateManager.setRetrievedState(state);
+ }
+ });
+ }
+ });
+ addFolder.setTextDescription(textDescription);
+ addFolder.setParentMenuTitle(parentMenuTitle);
+ addFolder.setParentSubMenuTitle(parentMenuSubtitle);
+ addFolder.setIconUrl(iconUrl);
+ return addFolder;
+ }
+
+ private ActionDescriptor<StateToken> createUploadAction(final String textDescription, final String iconUrl,
+ final String toolTip, final String permitedExtensions) {
+ final ActionButtonDescriptor<StateToken> uploadFile;
+ uploadFile = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.bootombarAndItemMenu,
+ new Slot<StateToken>() {
+ public void onEvent(final StateToken token) {
+ if (permitedExtensions != null) {
+ Log.info("Permited extensions (in dev): " + permitedExtensions);
+ fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
+ }
+ fileUploaderProvider.get().show();
+ }
+ });
+ uploadFile.setTextDescription(textDescription);
+ uploadFile.setIconUrl(iconUrl);
+ uploadFile.setToolTip(toolTip);
+ return uploadFile;
+ }
+}
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-22 11:28:17 UTC (rev 877)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientModule.java 2008-09-22 11:53:01 UTC (rev 878)
@@ -65,11 +65,10 @@
register(SingletonScope.class, new Factory<DocumentClientTool>(DocumentClientTool.class) {
public DocumentClientTool create() {
+ $(DocumentClientActions.class);
return new DocumentClientTool(i18n, $(ToolSelector.class), $(WsThemePresenter.class),
- $(WorkspaceSkeleton.class), $$(DocumentContext.class), $(ContextNavigator.class),
- $(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class),
- $(ContentActionRegistry.class), $(ContextActionRegistry.class),
- $(DragDropContentRegistry.class), $(ContentIconsRegistry.class));
+ $(WorkspaceSkeleton.class), $$(DocumentContext.class), $$(ContentServiceAsync.class),
+ $(ContentActionRegistry.class), $(DragDropContentRegistry.class), $(ContentIconsRegistry.class));
}
});
@@ -105,6 +104,14 @@
}
});
+ register(SingletonScope.class, new Factory<DocumentClientActions>(DocumentClientActions.class) {
+ public DocumentClientActions create() {
+ return new DocumentClientActions($(I18nUITranslationService.class), $(ContextNavigator.class),
+ $(Session.class), $(StateManager.class), $$(ContentServiceAsync.class), $$(FileUploader.class),
+ $(ContextActionRegistry.class));
+ }
+ });
+
register(SingletonScope.class, new Factory<DocumentContent>(DocumentContent.class) {
public DocumentContent create() {
final ActionToolbarPanel contentNavigatorToolbar = new ActionToolbarPanel(
Modified: trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java
===================================================================
--- trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-22 11:28:17 UTC (rev 877)
+++ trunk/src/main/java/org/ourproject/kune/docs/client/DocumentClientTool.java 2008-09-22 11:53:01 UTC (rev 878)
@@ -21,37 +21,17 @@
package org.ourproject.kune.docs.client;
import org.ourproject.kune.docs.client.ctx.DocumentContext;
-import org.ourproject.kune.platf.client.actions.ActionButtonDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionButtonSeparator;
-import org.ourproject.kune.platf.client.actions.ActionDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionEnableCondition;
-import org.ourproject.kune.platf.client.actions.ActionMenuDescriptor;
-import org.ourproject.kune.platf.client.actions.ActionPosition;
import org.ourproject.kune.platf.client.actions.ContentActionRegistry;
import org.ourproject.kune.platf.client.actions.ContentIconsRegistry;
-import org.ourproject.kune.platf.client.actions.ContextActionRegistry;
import org.ourproject.kune.platf.client.actions.DragDropContentRegistry;
-import org.ourproject.kune.platf.client.dto.AccessRolDTO;
-import org.ourproject.kune.platf.client.dto.ContentDTO;
-import org.ourproject.kune.platf.client.dto.InitDataDTO;
-import org.ourproject.kune.platf.client.dto.StateDTO;
-import org.ourproject.kune.platf.client.dto.StateToken;
-import org.ourproject.kune.platf.client.rpc.AsyncCallbackSimple;
import org.ourproject.kune.platf.client.rpc.ContentServiceAsync;
-import org.ourproject.kune.platf.client.state.Session;
-import org.ourproject.kune.platf.client.state.StateManager;
import org.ourproject.kune.platf.client.tool.AbstractClientTool;
import org.ourproject.kune.platf.client.tool.ToolSelector;
-import org.ourproject.kune.platf.client.ui.dialogs.FileUploader;
-import org.ourproject.kune.workspace.client.ctxnav.ContextNavigator;
import org.ourproject.kune.workspace.client.i18n.I18nUITranslationService;
-import org.ourproject.kune.workspace.client.site.Site;
import org.ourproject.kune.workspace.client.skel.WorkspaceSkeleton;
import org.ourproject.kune.workspace.client.themes.WsThemePresenter;
-import com.allen_sauer.gwt.log.client.Log;
import com.calclab.suco.client.provider.Provider;
-import com.calclab.suco.client.signal.Slot;
public class DocumentClientTool extends AbstractClientTool {
public static final String TYPE_ROOT = "docs.root";
@@ -67,36 +47,19 @@
public static final String NAME = "docs";
private final Provider<DocumentContext> documentContextProvider;
- private final ContextNavigator contextNavigator;
- private final StateManager stateManager;
- private final I18nUITranslationService i18n;
- private final Session session;
- private final Provider<ContentServiceAsync> contentServiceProvider;
- private final Provider<FileUploader> fileUploaderProvider;
- private final ContextActionRegistry contextActionRegistry;
private final DragDropContentRegistry dragDropContentRegistry;
private final ContentIconsRegistry contentIconsRegistry;
public DocumentClientTool(final I18nUITranslationService i18n, final ToolSelector toolSelector,
final WsThemePresenter wsThemePresenter, final WorkspaceSkeleton ws,
- final Provider<DocumentContext> documentContextProvider, final ContextNavigator contextNavigator,
- final Session session, final StateManager stateManager,
+ final Provider<DocumentContext> documentContextProvider,
final Provider<ContentServiceAsync> contentServiceProvider,
- final Provider<FileUploader> fileUploaderProvider, final ContentActionRegistry contentActionRegistry,
- final ContextActionRegistry contextActionRegistry, final DragDropContentRegistry dragDropContentRegistry,
+ final ContentActionRegistry contentActionRegistry, final DragDropContentRegistry dragDropContentRegistry,
final ContentIconsRegistry contentIconsRegistry) {
super(NAME, i18n.t("documents"), toolSelector, wsThemePresenter, ws);
- this.i18n = i18n;
this.documentContextProvider = documentContextProvider;
- this.contextNavigator = contextNavigator;
- this.session = session;
- this.stateManager = stateManager;
- this.contentServiceProvider = contentServiceProvider;
- this.fileUploaderProvider = fileUploaderProvider;
- this.contextActionRegistry = contextActionRegistry;
this.dragDropContentRegistry = dragDropContentRegistry;
this.contentIconsRegistry = contentIconsRegistry;
- createActions();
registerDragDropTypes();
registerImageTypes();
}
@@ -115,229 +78,6 @@
documentContextProvider.get().showAdmin();
}
- private void createActions() {
- final ActionMenuDescriptor<StateToken> addFolder = createFolderAction(TYPE_FOLDER, "images/nav/folder_add.png",
- i18n.t("New folder"), i18n.t("Folder"), i18n.t("New"), i18n.t("New folder"));
- final ActionMenuDescriptor<StateToken> addGallery = createFolderAction(TYPE_GALLERY,
- "images/nav/gallery_add.png", i18n.t("New gallery"), i18n.t("Folder"), i18n.t("New"), i18n
- .t("New gallery"));
- final ActionMenuDescriptor<StateToken> addWiki = createFolderAction(TYPE_WIKI, "images/nav/wiki_add.png", i18n
- .t("New wiki"), i18n.t("Folder"), i18n.t("New"), i18n.t("wiki"));
-
- final ActionMenuDescriptor<StateToken> addDoc = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor,
- ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- Site.showProgressProcessing();
- contentServiceProvider.get().addContent(session.getUserHash(),
- session.getCurrentState().getStateToken(), i18n.t("New document"),
- new AsyncCallbackSimple<StateDTO>() {
- public void onSuccess(final StateDTO state) {
- contextNavigator.setEditOnNextStateChange(true);
- stateManager.setRetrievedState(state);
- }
- });
- }
- });
- addDoc.setTextDescription(i18n.t("New document"));
- addDoc.setParentMenuTitle(i18n.t("Folder"));
- addDoc.setParentSubMenuTitle(i18n.t("New"));
- addDoc.setIconUrl("images/nav/page_add.png");
-
- final ActionMenuDescriptor<StateToken> delContainer = new ActionMenuDescriptor<StateToken>(
- AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- Site.info("Sorry, in development");
- }
- });
- delContainer.setParentMenuTitle(i18n.t("Folder"));
- delContainer.setTextDescription(i18n.t("Delete folder"));
- delContainer.setMustBeConfirmed(true);
- delContainer.setConfirmationTitle(i18n.t("Please confirm"));
- delContainer.setConfirmationText(i18n.t("You will delete it and also all its contents. Are you sure?"));
-
- final ActionMenuDescriptor<StateToken> delContent = new ActionMenuDescriptor<StateToken>(
- AccessRolDTO.Administrator, ActionPosition.topbarAndItemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- contentServiceProvider.get().delContent(session.getUserHash(), token,
- new AsyncCallbackSimple<String>() {
- public void onSuccess(final String result) {
- final StateToken parent = token.clone().clearDocument();
- stateManager.gotoToken(parent);
- }
- });
- }
- });
- delContent.setParentMenuTitle(i18n.t("Folder"));
- delContent.setTextDescription(i18n.t("Delete document"));
- delContent.setMustBeConfirmed(true);
- delContent.setConfirmationTitle(i18n.t("Please confirm"));
- delContent.setConfirmationText(i18n.t("Are you sure?"));
-
- final ActionDescriptor<StateToken> go = new ActionDescriptor<StateToken>(AccessRolDTO.Viewer,
- ActionPosition.itemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- stateManager.gotoToken(token);
- }
- });
- go.setTextDescription(i18n.t("Open"));
- go.setIconUrl("images/nav/go.png");
- go.setEnableCondition(new ActionEnableCondition<StateToken>() {
- public boolean mustBeEnabled(final StateToken currentStateToken) {
- return !contextNavigator.isSelected(currentStateToken);
- }
- });
-
- final ActionDescriptor<StateToken> rename = new ActionDescriptor<StateToken>(AccessRolDTO.Editor,
- ActionPosition.itemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken stateToken) {
- contextNavigator.editItem(stateToken);
- }
- });
- rename.setTextDescription(i18n.t("Rename"));
-
- final ActionButtonDescriptor<StateToken> goGroupHome = new ActionButtonDescriptor<StateToken>(
- AccessRolDTO.Viewer, ActionPosition.topbar, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- stateManager.gotoToken(token.getGroup());
- }
- });
- goGroupHome.setIconUrl("images/group-home.png");
- goGroupHome.setEnableCondition(new ActionEnableCondition<StateToken>() {
- public boolean mustBeEnabled(final StateToken currentStateToken) {
- final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent()
- .getStateToken();
- return !currentStateToken.equals(defContentToken);
- }
- });
-
- final ActionMenuDescriptor<StateToken> setAsDefGroupContent = new ActionMenuDescriptor<StateToken>(
- AccessRolDTO.Administrator, ActionPosition.itemMenu, new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- Site.showProgressProcessing();
- contentServiceProvider.get().setAsDefaultContent(session.getUserHash(), token,
- new AsyncCallbackSimple<ContentDTO>() {
- public void onSuccess(ContentDTO defContent) {
- session.getCurrentState().getGroup().setDefaultContent(defContent);
- Site.hideProgress();
- Site.info(i18n.t("Document selected as the group homepage"));
- }
- });
- }
- });
- setAsDefGroupContent.setTextDescription(i18n.t("Set this as the group default page"));
- setAsDefGroupContent.setIconUrl("images/group-home.png");
- setAsDefGroupContent.setEnableCondition(new ActionEnableCondition<StateToken>() {
- public boolean mustBeEnabled(final StateToken currentStateToken) {
- final StateToken defContentToken = session.getCurrentState().getGroup().getDefaultContent()
- .getStateToken();
- return !contextNavigator.isSelected(defContentToken);
- }
- });
-
- final ActionButtonDescriptor<StateToken> refresh = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Viewer,
- ActionPosition.topbar, new Slot<StateToken>() {
- public void onEvent(StateToken stateToken) {
- stateManager.reload();
- contextNavigator.selectItem(stateToken);
- }
- });
- refresh.setIconUrl("images/nav/refresh.png");
- refresh.setToolTip(i18n.t("Refresh"));
- refresh.setLeftSeparator(ActionButtonSeparator.fill);
-
- final ActionDescriptor<StateToken> uploadFile = createUploadAction(i18n.t("Upload file"),
- "images/nav/upload.png", i18n.t("Upload some files (images, PDFs, ...)"), null);
-
- session.onInitDataReceived(new Slot<InitDataDTO>() {
- public void onEvent(final InitDataDTO parameter) {
- final ActionDescriptor<StateToken> uploadMedia = createUploadAction(i18n.t("Upload media"),
- "images/nav/upload.png", i18n.t("Upload some media (images, videos)"), session
- .getGalleryPermittedExtensions());
- contextActionRegistry.addAction(TYPE_GALLERY, uploadMedia);
- }
- });
-
- contextActionRegistry.addAction(TYPE_FOLDER, go);
- contextActionRegistry.addAction(TYPE_FOLDER, addDoc);
- contextActionRegistry.addAction(TYPE_FOLDER, addFolder);
- contextActionRegistry.addAction(TYPE_FOLDER, delContainer);
- contextActionRegistry.addAction(TYPE_FOLDER, rename);
- contextActionRegistry.addAction(TYPE_FOLDER, goGroupHome);
- contextActionRegistry.addAction(TYPE_FOLDER, refresh);
- contextActionRegistry.addAction(TYPE_FOLDER, uploadFile);
-
- contextActionRegistry.addAction(TYPE_BLOG, go);
- contextActionRegistry.addAction(TYPE_BLOG, uploadFile);
- contextActionRegistry.addAction(TYPE_BLOG, setAsDefGroupContent);
- contextActionRegistry.addAction(TYPE_BLOG, refresh);
-
- contextActionRegistry.addAction(TYPE_GALLERY, go);
- contextActionRegistry.addAction(TYPE_GALLERY, goGroupHome);
- contextActionRegistry.addAction(TYPE_GALLERY, refresh);
-
- contextActionRegistry.addAction(TYPE_WIKI, go);
- contextActionRegistry.addAction(TYPE_WIKI, goGroupHome);
- contextActionRegistry.addAction(TYPE_WIKI, refresh);
-
- contextActionRegistry.addAction(TYPE_ROOT, addDoc);
- contextActionRegistry.addAction(TYPE_ROOT, addFolder);
- contextActionRegistry.addAction(TYPE_ROOT, addGallery);
- contextActionRegistry.addAction(TYPE_ROOT, addWiki);
- contextActionRegistry.addAction(TYPE_ROOT, goGroupHome);
- contextActionRegistry.addAction(TYPE_ROOT, refresh);
- contextActionRegistry.addAction(TYPE_ROOT, uploadFile);
-
- contextActionRegistry.addAction(TYPE_DOCUMENT, go);
- contextActionRegistry.addAction(TYPE_DOCUMENT, delContent);
- contextActionRegistry.addAction(TYPE_DOCUMENT, rename);
- contextActionRegistry.addAction(TYPE_DOCUMENT, goGroupHome);
- contextActionRegistry.addAction(TYPE_DOCUMENT, refresh);
- contextActionRegistry.addAction(TYPE_DOCUMENT, setAsDefGroupContent);
- }
-
- private ActionMenuDescriptor<StateToken> createFolderAction(final String contentTypeId, final String iconUrl,
- final String textDescription, final String parentMenuTitle, final String parentMenuSubtitle,
- final String defaultName) {
- final ActionMenuDescriptor<StateToken> addFolder;
- addFolder = new ActionMenuDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.topbarAndItemMenu,
- new Slot<StateToken>() {
- public void onEvent(final StateToken stateToken) {
- Site.showProgressProcessing();
- contentServiceProvider.get().addFolder(session.getUserHash(), stateToken, defaultName,
- contentTypeId, new AsyncCallbackSimple<StateDTO>() {
- public void onSuccess(final StateDTO state) {
- contextNavigator.setEditOnNextStateChange(true);
- stateManager.setRetrievedState(state);
- }
- });
- }
- });
- addFolder.setTextDescription(textDescription);
- addFolder.setParentMenuTitle(parentMenuTitle);
- addFolder.setParentSubMenuTitle(parentMenuSubtitle);
- addFolder.setIconUrl(iconUrl);
- return addFolder;
- }
-
- private ActionDescriptor<StateToken> createUploadAction(final String textDescription, final String iconUrl,
- final String toolTip, final String permitedExtensions) {
- final ActionButtonDescriptor<StateToken> uploadFile;
- uploadFile = new ActionButtonDescriptor<StateToken>(AccessRolDTO.Editor, ActionPosition.bootombarAndItemMenu,
- new Slot<StateToken>() {
- public void onEvent(final StateToken token) {
- if (permitedExtensions != null) {
- Log.info("Permited extensions (in dev): " + permitedExtensions);
- fileUploaderProvider.get().setPermittedExtensions(permitedExtensions);
- }
- fileUploaderProvider.get().show();
- }
- });
- uploadFile.setTextDescription(textDescription);
- uploadFile.setIconUrl(iconUrl);
- uploadFile.setToolTip(toolTip);
- return uploadFile;
- }
-
private void registerDragDropTypes() {
dragDropContentRegistry.registerDraggableType(TYPE_DOCUMENT);
dragDropContentRegistry.registerDraggableType(TYPE_FOLDER);
1
0