Java tutorial
/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 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 Lesser General Public License for more details. * * Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved. */ package org.pentaho.mantle.client.solutionbrowser.fileproperties; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.pentaho.gwt.widgets.client.filechooser.RepositoryFile; import org.pentaho.mantle.client.commands.RestoreFileCommand; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPanel; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.Response; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.xml.client.Document; import com.google.gwt.xml.client.XMLParser; /** * */ public class GeneralPanel extends FlexTable implements IFileModifier { Label nameLabel = new Label(); Label locationLabel = new Label(); Label sourceLabel = new Label(); Label typeLabel = new Label(); Label sizeLabel = new Label(); Label createdLabel = new Label(); Label lastModifiedDateLabel = new Label(); Label deletedDateLabel = new Label(); Label originalLocationLabel = new Label(); Label ownerLabel = new Label(); // IFileSummary fileSummary; RepositoryFile fileSummary; boolean isInTrash; boolean dirty = false; ArrayList<JSONObject> metadataPerms = new ArrayList<JSONObject>(); VerticalPanel metadataPermsPanel = new VerticalPanel(); private static final String METADATA_PERM_PREFIX = "_PERM_"; //$NON-NLS-1$ private static final String OWNER_NAME_ELEMENT_NAME = "owner"; //$NON-NLS-1$ /** * * @param dialog * @param fileSummary */ public GeneralPanel(final FilePropertiesDialog dialog, final RepositoryFile fileSummary) { super(); this.fileSummary = fileSummary; isInTrash = this.fileSummary.getPath().contains("/.trash/pho:"); //$NON-NLS-1$ setWidget(0, 0, new Label(Messages.getString("name") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(0, 1, nameLabel); setWidget(1, 0, new Label(Messages.getString("type") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(1, 1, typeLabel); addHr(2, 0, 2); setWidget(3, 0, new Label(Messages.getString("owner") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(3, 1, ownerLabel); setWidget(4, 0, new Label(Messages.getString("source") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(4, 1, sourceLabel); setWidget(5, 0, new Label(Messages.getString("location") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(5, 1, locationLabel); setWidget(6, 0, new Label(Messages.getString("size") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(6, 1, sizeLabel); addHr(7, 0, 2); setWidget(8, 0, new Label(Messages.getString("created") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(8, 1, createdLabel); setWidget(9, 0, new Label(Messages.getString("lastModified") + ":")); //$NON-NLS-1$ //$NON-NLS-2$ setWidget(9, 1, lastModifiedDateLabel); addHr(10, 0, 2); if (isInTrash) { setWidget(11, 0, new Label(Messages.getString("dateDeleted") + ":")); //$NON-NLS-1$//$NON-NLS-2$ setWidget(11, 1, deletedDateLabel); Label lbl = new Label(Messages.getString("originalLocation") + ":"); //$NON-NLS-1$ //$NON-NLS-2$ lbl.addStyleName("nowrap"); //$NON-NLS-1$ setWidget(12, 0, lbl); setWidget(12, 1, originalLocationLabel); Button restoreButton = new Button("Restore"); restoreButton.setStylePrimaryName("pentaho-button"); restoreButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { List<RepositoryFile> restoreList = new ArrayList<RepositoryFile>(); restoreList.add(fileSummary); new RestoreFileCommand(restoreList).execute(); dialog.hide(); } }); setWidget(13, 3, restoreButton); addHr(14, 0, 2); } setWidget(14, 0, metadataPermsPanel); setCellPadding(2); setCellSpacing(2); init(); } /** * */ @Override public void apply() { // not used } @Override public List<RequestBuilder> prepareRequests() { ArrayList<RequestBuilder> requestBuilders = new ArrayList<RequestBuilder>(); String moduleBaseURL = GWT.getModuleBaseURL(); String moduleName = GWT.getModuleName(); String contextURL = moduleBaseURL.substring(0, moduleBaseURL.lastIndexOf(moduleName)); String setMetadataUrl = contextURL + "api/repo/files/" //$NON-NLS-1$ + SolutionBrowserPanel.pathToId(fileSummary.getPath()) + "/metadata?cb=" //$NON-NLS-1$ + System.currentTimeMillis(); RequestBuilder setMetadataBuilder = new RequestBuilder(RequestBuilder.PUT, setMetadataUrl); setMetadataBuilder.setHeader("Content-Type", "application/json"); setMetadataBuilder.setHeader("If-Modified-Since", "01 Jan 1970 00:00:00 GMT"); // prepare request data JSONArray arr = new JSONArray(); JSONObject metadata = new JSONObject(); metadata.put("stringKeyStringValueDto", arr); for (int i = 0; i < metadataPerms.size(); i++) { Set<String> keys = metadataPerms.get(i).keySet(); for (String key : keys) { if (key != null && SolutionBrowserPanel.getInstance().isAdministrator()) { if (key.equals(org.pentaho.platform.api.repository2.unified.RepositoryFile.SCHEDULABLE_KEY) && !fileSummary.isFolder() || key.equals(org.pentaho.platform.api.repository2.unified.RepositoryFile.HIDDEN_KEY)) { JSONObject obj = new JSONObject(); obj.put("key", new JSONString(key)); obj.put("value", metadataPerms.get(i).get(key).isString()); arr.set(i, obj); } } } } // setMetadataBuilder.sendRequest(metadata.toString(), setMetadataCallback); if (arr.size() > 0) { setMetadataBuilder.setRequestData(metadata.toString()); requestBuilders.add(setMetadataBuilder); } return requestBuilders; } /** * */ public void init() { nameLabel.setText(fileSummary.getTitle()); typeLabel.setText(fileSummary.isFolder() ? Messages.getString("folder") //$NON-NLS-1$ : fileSummary.getName().substring(fileSummary.getName().lastIndexOf("."))); //$NON-NLS-1$ sourceLabel.setText(isInTrash ? Messages.getString("recycleBin") : fileSummary.getPath()); //$NON-NLS-1$//$NON-NLS-2$ locationLabel.setText(isInTrash ? Messages.getString("recycleBin") //$NON-NLS-1$ : fileSummary.getPath().substring(0, fileSummary.getPath().lastIndexOf("/"))); //$NON-NLS-1$ sizeLabel.setText(NumberFormat.getDecimalFormat().format(fileSummary.getFileSize() / 1000.00) + " " //$NON-NLS-1$ + Messages.getString("kiloBytes")); //$NON-NLS-1$\ DateTimeFormat df = DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_FULL); createdLabel.setText(df.format(fileSummary.getCreatedDate())); lastModifiedDateLabel .setText(fileSummary.getLastModifiedDate() == null ? df.format(fileSummary.getCreatedDate()) : df.format(fileSummary.getLastModifiedDate())); deletedDateLabel .setText(fileSummary.getDeletedDate() == null ? "" : fileSummary.getDeletedDate().toString()); //$NON-NLS-1$ originalLocationLabel.setText(fileSummary.getOriginalParentFolderPath()); } /* * (non-Javadoc) * * @see * org.pentaho.mantle.client.solutionbrowser.fileproperties.IFileModifier#init(org.pentaho.platform.repository2 * .unified.webservices.RepositoryFileDto, com.google.gwt.xml.client.Document) */ @Override public void init(RepositoryFile fileSummary, Document fileInfo) { // TODO Auto-generated method stub } /** * Add an hr element with a specified colspan * * @param row * @param col */ @SuppressWarnings("serial") protected void addHr(int row, int col, int colspan) { setHTML(row, col, new SafeHtml() { @Override public String asString() { return "<hr/>"; } }); getFlexCellFormatter().setColSpan(row, col, colspan); } /** * Accept metadata response object and parse for use in General panel * * @param response */ protected void setMetadataResponse(Response response) { JSONObject json = (JSONObject) JSONParser.parseLenient(response.getText()); if (json != null) { JSONArray arr = (JSONArray) json.get("stringKeyStringValueDto"); for (int i = 0; i < arr.size(); i++) { JSONValue arrVal = arr.get(i); String key = arrVal.isObject().get("key").isString().stringValue(); if (key != null && SolutionBrowserPanel.getInstance().isAdministrator()) { if (key.equals(org.pentaho.platform.api.repository2.unified.RepositoryFile.SCHEDULABLE_KEY) && !fileSummary.isFolder() || key.equals(org.pentaho.platform.api.repository2.unified.RepositoryFile.HIDDEN_KEY)) { String value = arrVal.isObject().get("value").isString().stringValue(); if (key.startsWith(METADATA_PERM_PREFIX)) { JSONObject nv = new JSONObject(); nv.put(key, new JSONString(value)); metadataPerms.add(nv); } } } } for (final JSONObject nv : metadataPerms) { Set<String> keys = nv.keySet(); for (final String key : keys) { if (key != null && SolutionBrowserPanel.getInstance().isAdministrator()) { if (key.equals(org.pentaho.platform.api.repository2.unified.RepositoryFile.SCHEDULABLE_KEY) && !fileSummary.isFolder() || key.equals( org.pentaho.platform.api.repository2.unified.RepositoryFile.HIDDEN_KEY)) { final CheckBox cb = new CheckBox( Messages.getString(key.substring(METADATA_PERM_PREFIX.length()).toLowerCase())); cb.setWordWrap(false); cb.setValue(Boolean.parseBoolean(nv.get(key).isString().stringValue())); cb.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { dirty = true; nv.put(key, new JSONString(cb.getValue().toString())); } }); metadataPermsPanel.add(cb); } } } } } } /** * Get owner name from acl response * * @param response */ protected void setAclResponse(Response response) { Document permissions = XMLParser.parse(response.getText()); ownerLabel.setText( permissions.getElementsByTagName(OWNER_NAME_ELEMENT_NAME).item(0).getFirstChild().getNodeValue()); } }