Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.directory.studio.schemaeditor.controller; import org.apache.directory.api.ldap.model.schema.AttributeType; import org.apache.directory.api.ldap.model.schema.MutableObjectClass; import org.apache.directory.api.ldap.model.schema.ObjectClass; import org.apache.directory.api.ldap.model.schema.SchemaObject; import org.apache.directory.studio.schemaeditor.Activator; import org.apache.directory.studio.schemaeditor.PluginUtils; import org.apache.directory.studio.schemaeditor.model.schemachecker.SchemaCheckerListener; import org.apache.directory.studio.schemaeditor.view.ViewUtils; import org.apache.directory.studio.schemaeditor.view.editors.attributetype.AttributeTypeEditor; import org.apache.directory.studio.schemaeditor.view.editors.attributetype.AttributeTypeEditorInput; import org.apache.directory.studio.schemaeditor.view.editors.objectclass.ObjectClassEditor; import org.apache.directory.studio.schemaeditor.view.editors.objectclass.ObjectClassEditorInput; import org.apache.directory.studio.schemaeditor.view.views.ProblemsView; import org.apache.directory.studio.schemaeditor.view.widget.Folder; import org.apache.directory.studio.schemaeditor.view.wrappers.SchemaErrorWrapper; import org.apache.directory.studio.schemaeditor.view.wrappers.SchemaWarningWrapper; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; /** * This class implements the Controller for the ProblemsView. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class ProblemsViewController { /** The associated view */ private ProblemsView view; /** The SchemaCheckerListener */ private SchemaCheckerListener schemaCheckerListener = new SchemaCheckerListener() { public void schemaCheckerUpdated() { Display.getDefault().asyncExec(new Runnable() { public void run() { view.reloadViewer(); } }); } }; /** * Creates a new instance of SchemasViewController. * * @param view * the associated view */ public ProblemsViewController(ProblemsView view) { this.view = view; // SchemaCheckerListener Activator.getDefault().getSchemaChecker().addListener(schemaCheckerListener); initDoubleClickListener(); } /** * Initializes the DoubleClickListener. */ private void initDoubleClickListener() { view.getViewer().addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); TreeViewer viewer = view.getViewer(); // What we get from the treeViewer is a StructuredSelection StructuredSelection selection = (StructuredSelection) event.getSelection(); // Here's the real object (an AttributeTypeWrapper, ObjectClassWrapper or IntermediateNode) Object objectSelection = selection.getFirstElement(); IEditorInput input = null; String editorId = null; // Selecting the right editor and input if (objectSelection instanceof SchemaErrorWrapper) { SchemaObject object = ((SchemaErrorWrapper) objectSelection).getLdapSchemaException() .getSourceObject(); if (object instanceof AttributeType) { input = new AttributeTypeEditorInput( Activator.getDefault().getSchemaHandler().getAttributeType(object.getOid())); editorId = AttributeTypeEditor.ID; } else if (object instanceof ObjectClass) { input = new ObjectClassEditorInput( Activator.getDefault().getSchemaHandler().getObjectClass(object.getOid())); editorId = ObjectClassEditor.ID; } } else if (objectSelection instanceof SchemaWarningWrapper) { SchemaObject object = ((SchemaWarningWrapper) objectSelection).getSchemaWarning().getSource(); if (object instanceof AttributeType) { input = new AttributeTypeEditorInput((AttributeType) object); editorId = AttributeTypeEditor.ID; } else if (object instanceof ObjectClass) { input = new ObjectClassEditorInput((MutableObjectClass) object); editorId = ObjectClassEditor.ID; } } else if ((objectSelection instanceof Folder)) { // Here we don't open an editor, we just expand the node. viewer.setExpandedState(objectSelection, !viewer.getExpandedState(objectSelection)); } // Let's open the editor if (input != null) { try { page.openEditor(input, editorId); } catch (PartInitException e) { PluginUtils.logError(Messages.getString("ProblemsViewController.ErrorOpeningEditor"), e); //$NON-NLS-1$ ViewUtils.displayErrorMessageDialog(Messages.getString("ProblemsViewController.Error"), //$NON-NLS-1$ Messages.getString("ProblemsViewController.ErrorOpeningEditor")); //$NON-NLS-1$ } } } }); } /** * Disposes the listeners. */ public void dispose() { // SchemaCheckerListener Activator.getDefault().getSchemaChecker().removeListener(schemaCheckerListener); } }