--- /dev/null
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.slc.client.ui.dist.commands;
+
+import javax.jcr.Repository;
+import javax.jcr.Session;
+
+import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.client.ui.dist.DistPlugin;
+import org.argeo.slc.client.ui.dist.model.RepoElem;
+import org.argeo.slc.repo.RepoService;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Open a dialog that displays various information on the current repository.
+ */
+public class DisplayRepoInformation extends AbstractHandler {
+ public final static String ID = DistPlugin.ID + ".displayRepoInformation";
+ public final static String DEFAULT_LABEL = "Information";
+ public final static ImageDescriptor DEFAULT_ICON = DistPlugin
+ .getImageDescriptor("icons/help.gif");
+
+ /* DEPENDENCY INJECTION */
+ private RepoService repoService;
+ private Repository nodeRepository;
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IStructuredSelection iss = (IStructuredSelection) HandlerUtil
+ .getActiveSite(event).getSelectionProvider().getSelection();
+ if (iss.getFirstElement() instanceof RepoElem) {
+ RepoElem re = (RepoElem) iss.getFirstElement();
+
+ Session defaultSession = null;
+ try {
+ defaultSession = repoService.getRemoteSession(re.getRepoNodePath(),
+ re.getUri(), null);
+
+ InformationDialog inputDialog = new InformationDialog(
+ HandlerUtil.getActiveSite(event).getShell());
+ inputDialog.create();
+ // TODO add more information.
+ inputDialog.loginTxt.setText(defaultSession.getUserID());
+ inputDialog.nameTxt.setText(re.getLabel());
+ inputDialog.uriTxt.setText(re.getUri());
+ inputDialog.readOnlyBtn.setSelection(re.isReadOnly());
+
+ inputDialog.open();
+ // } catch (RepositoryException e) {
+ // throw new SlcException("Unexpected error while "
+ // + "getting repository information.", e);
+ } finally {
+ JcrUtils.logoutQuietly(defaultSession);
+ }
+ }
+ return null;
+ }
+
+ private class InformationDialog extends Dialog {
+ Text nameTxt;
+ Text uriTxt;
+ Text loginTxt;
+ Button readOnlyBtn;
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ // No Cancel button
+ createButton(parent, IDialogConstants.OK_ID, "OK", true);
+ }
+
+ public InformationDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ protected Point getInitialSize() {
+ return new Point(500, 250);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite dialogarea = (Composite) super.createDialogArea(parent);
+ dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
+ true));
+ Composite composite = new Composite(dialogarea, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ layout.horizontalSpacing = 15;
+ composite.setLayout(layout);
+ GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false);
+ composite.setLayoutData(gd);
+
+ nameTxt = createLT(composite, "Name");
+ uriTxt = createLT(composite, "URI");
+ loginTxt = createLT(composite, "Logged as");
+ readOnlyBtn = createLC(composite, "Read only");
+ parent.pack();
+ return composite;
+ }
+
+ /** Creates label and text. */
+ protected Text createLT(Composite parent, String label) {
+ new Label(parent, SWT.RIGHT).setText(label);
+ Text text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.NONE);
+ text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ text.setEditable(false);
+ return text;
+ }
+
+ /** Creates label and check. */
+ protected Button createLC(Composite parent, String label) {
+ new Label(parent, SWT.RIGHT).setText(label);
+ Button check = new Button(parent, SWT.CHECK);
+ check.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ check.setEnabled(false);
+ return check;
+ }
+
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText("Repository information");
+ }
+ }
+
+ /* DEPENDENCY INJECTION */
+ public void setRepoService(RepoService repoService) {
+ this.repoService = repoService;
+ }
+
+ public void setNodeRepository(Repository nodeRepository) {
+ this.nodeRepository = nodeRepository;
+ }
+
+}
\ No newline at end of file