package org.gcube.portlets.user.workspace.client.view.windows; import java.util.Date; import java.util.List; import java.util.Map; import org.gcube.portlets.user.workspace.client.AppControllerExplorer; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.ControlGroup; import com.github.gwtbootstrap.client.ui.Label; import com.github.gwtbootstrap.client.ui.TextArea; import com.github.gwtbootstrap.client.ui.constants.LabelType; import com.github.gwtbootstrap.client.ui.constants.ResizeType; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Widget; public class DialogGetInfoBootstrap extends Composite { private static DialogGetInfoBootstrapUiBinder uiBinder = GWT.create(DialogGetInfoBootstrapUiBinder.class); interface DialogGetInfoBootstrapUiBinder extends UiBinder { } public static final String EMPTY = "empty"; private final NumberFormat number = ConstantsExplorer.numberFormatterKB; public DialogGetInfoBootstrap() { initWidget(uiBinder.createAndBindUi(this)); } public static final String NOT_AVAILABLE = "n.a."; private Map gCubeProperties; @UiField HorizontalPanel hpItemType; @UiField HorizontalPanel hpHeaderDetails; @UiField HTML txtName; @UiField HTML txtId; @UiField HTML txtLocation; @UiField ControlGroup cgTxtIsPublic; @UiField HTML txtIsPublic; @UiField HTML txtMimeType; @UiField ControlGroup cgThreddsSynched; @UiField HTML txtThreddsSynched; @UiField ControlGroup cgGcubeProperties; @UiField TextArea txtAreaGcubeProperties; @UiField TextArea txtAreaDescription; @UiField HTML txtOwner; @UiField HTML txtCreated; @UiField HTML txtLastMofication; @UiField HTML txtSize; @UiField HTML txtShared; @UiField Button buttonUpdateDescription; @UiField Button buttonUpdateGcubeProperties; private FileModel fileModel; /* * textAreaSharedWith = new TextArea(); private Html htmlUsersWidget = new * Html(); private Html htmlPropertiesWidget = new Html(); private final * NumberFormat number = ConstantsExplorer.numberFormatterKB; // private * TextField txtGcubeItemProperties; private HorizontalPanel * hpGcubeProperties; private DialogEditProperties editProperties = null; */ public DialogGetInfoBootstrap(final FileModel fileModel) { initWidget(uiBinder.createAndBindUi(this)); this.fileModel = fileModel; hpHeaderDetails.add(new HTML("Details")); hpItemType.add(fileModel.getIcon()); Label labelItemType = new Label(); labelItemType.setType(LabelType.INFO); labelItemType.getElement().getStyle().setMarginLeft(10, Unit.PX); String label = null; GXTFolderItemTypeEnum typeEnum = fileModel.getGXTFolderItemType(); if (typeEnum != null) { label = typeEnum.getLabel(); label = label.replace("External ", ""); // loading gcube properties if (typeEnum.equals(GXTFolderItemTypeEnum.GCUBE_ITEM)) loadGcubeItemProperties(); } else { label = fileModel.getType(); } labelItemType.setText(label); hpItemType.add(labelItemType); // Setting name htmlSetValue(txtName, fileModel.getName()); htmlSetValue(txtId, fileModel.getIdentifier()); if (fileModel.isRoot()) txtLocation.setHTML("/"); else loadLocation(fileModel.getIdentifier()); if (fileModel.isDirectory()) { cgTxtIsPublic.setVisible(true); htmlSetValue(txtIsPublic, fileModel.isPublic() + ""); if (fileModel.getSynchedThreddsStatus() != null) { txtThreddsSynched.setVisible(true); htmlSetValue(txtThreddsSynched, fileModel.getSynchedThreddsStatus() + ""); txtThreddsSynched.setHTML(fileModel.getSynchedThreddsStatus() + ""); } } //mimetype htmlSetValue(txtMimeType, fileModel.getType()); txtAreaDescription.setResize(ResizeType.VERTICAL); if (fileModel.isDirectory()) { txtAreaDescription.setValue(fileModel.getDescription()); // add(txtAreaDescription); } else loadDescription(fileModel.getIdentifier()); //owner htmlSetValue(txtOwner, fileModel.getOwnerFullName()); //creation date loadCreationDate(fileModel.getIdentifier()); if(fileModel instanceof FileGridModel) { FileGridModel fileGridModel = ((FileGridModel) fileModel); //last update htmlSetValue(txtLastMofication, fileGridModel.getLastModification().toString()); //size htmlSetValue(txtSize, getFormattedSize(fileGridModel.getSize())); }else { loadLastModificationDate(fileModel.getIdentifier()); loadSize(fileModel.getIdentifier()); } htmlSetValue(txtShared, fileModel.isShared()+""); addHandlers(); } private void addHandlers() { txtAreaDescription.addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent event) { GWT.log(event.getUnicodeCharCode() + ""); if (event.getUnicodeCharCode() == 13) { txtAreaDescription.setReadOnly(true); Window.alert("Updating description"); } } }); buttonUpdateDescription.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { txtAreaDescription.setReadOnly(false); txtAreaDescription.setFocus(true); } }); final Command cmdReloadProperties = new Command() { @Override public void execute() { loadGcubeItemProperties(); } }; buttonUpdateGcubeProperties.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final DialogEditProperties editProperties = new DialogEditProperties(fileModel, cmdReloadProperties); editProperties.show(); editProperties.setProperties(gCubeProperties); } }); } private void htmlSetValue(HTML field, String value) { if (value == null || value.isEmpty()) field.setHTML(NOT_AVAILABLE); else field.setHTML(value); } private String getFormattedSize(long value) { if (value > 0) { double kb = value / 1024; if (kb < 1) kb = 1; return number.format(kb); } else if (value == 0) { return EMPTY; } else return ""; } private void loadLocation(String itemId) { setPlaceholder(txtLocation, "loading..."); AppControllerExplorer.rpcWorkspaceService.getListParentsByItemIdentifier(itemId, false, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { GWT.log("failure get list parents by item identifier " + caught); removePlaceHolder(txtLocation); txtLocation.setHTML(NOT_AVAILABLE); // txtLocation.set(false); } @Override public void onSuccess(List result) { removePlaceHolder(txtLocation); String location = ""; if (result != null) { for (FileModel fileModel : result) { if (fileModel != null) location += "/" + fileModel.getName(); } } if (location.isEmpty()) location = "/"; txtLocation.setHTML(location); } }); } private void loadSize(final String itemId) { GWT.log("Load size"); setPlaceholder(txtSize, "loading..."); AppControllerExplorer.rpcWorkspaceService.loadSizeByItemId(itemId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log("an error occured in load creation date by Id " + itemId + " " + caught.getMessage()); removePlaceHolder(txtSize); } @Override public void onSuccess(Long result) { GWT.log("Loaded size=" + result); removePlaceHolder(txtSize); if(result!=null) htmlSetValue(txtSize, getFormattedSize(result)); else htmlSetValue(txtSize, null); } }); } private void loadCreationDate(final String itemId) { setPlaceholder(txtCreated, "loading..."); AppControllerExplorer.rpcWorkspaceService.getItemCreationDateById(itemId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log("an error occured in load creation date by Id " + itemId + " " + caught.getMessage()); removePlaceHolder(txtCreated); } @Override public void onSuccess(Date result) { removePlaceHolder(txtCreated); if (result != null) htmlSetValue(txtCreated, result.toString()); else htmlSetValue(txtCreated, null); } }); } private void loadLastModificationDate(final String itemId) { setPlaceholder(txtLastMofication, "loading..."); AppControllerExplorer.rpcWorkspaceService.loadLastModificationDateById(itemId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log("an error occured in loadLastModificationDateById " + itemId + " " + caught.getMessage()); removePlaceHolder(txtLastMofication); } @Override public void onSuccess(Date result) { removePlaceHolder(txtLastMofication); if (result != null) htmlSetValue(txtLastMofication, result.toString()); else htmlSetValue(txtLastMofication, null); } }); } /** * @param identifier */ private void loadDescription(String identifier) { txtAreaDescription.setEnabled(false); AppControllerExplorer.rpcWorkspaceService.getItemDescriptionById(identifier, new AsyncCallback() { @Override public void onFailure(Throwable arg0) { txtAreaDescription.setEnabled(false); } @Override public void onSuccess(String result) { if (result != null) txtAreaDescription.setValue(result); else txtAreaDescription.setValue(""); txtAreaDescription.setEnabled(true); } }); } private void loadGcubeItemProperties() { // mask("Loading properties..."); AppControllerExplorer.rpcWorkspaceService.loadGcubeItemProperties(fileModel.getIdentifier(), new AsyncCallback>() { @Override public void onSuccess(Map result) { txtAreaGcubeProperties.setText(""); GWT.log("Gcube Item Properties: " + result); gCubeProperties = result; // unmask(); if (result != null && result.size() > 0) { for (String key : result.keySet()) { String text = txtAreaGcubeProperties.getText(); text += key + "=" + result.get(key) + ";\n"; txtAreaGcubeProperties.setText(text); } cgGcubeProperties.setVisible(true); } } @Override public void onFailure(Throwable caught) { // unmask(); cgGcubeProperties.setVisible(false); GWT.log("an error occured in loadGcubeItemProperties " + fileModel.getIdentifier() + " " + caught.getMessage()); } }); } private void setPlaceholder(HTML html, String placeholder) { html.setHTML(placeholder); html.getElement().getStyle().setColor("#E8E8E8"); } private void removePlaceHolder(HTML html) { html.setHTML(""); html.getElement().getStyle().setColor("#000"); } }