/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2015-2016 ForgeRock AS. */ package org.opends.guitools.controlpanel.ui; import static org.opends.server.util.StaticUtils.*; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import javax.swing.JList; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import org.forgerock.opendj.ldap.schema.AttributeType; import org.forgerock.opendj.ldap.schema.ObjectClass; import org.opends.guitools.controlpanel.event.SchemaElementSelectionEvent; import org.opends.guitools.controlpanel.event.SchemaElementSelectionListener; import org.forgerock.opendj.ldap.schema.Schema; /** * Abstract class used to re-factor some code among the panels that display the * contents of a schema element. */ public abstract class SchemaElementPanel extends StatusGenericPanel { private static final long serialVersionUID = -8556383593966382604L; private Set listeners = new HashSet<>(); /** * The empty border shared by all the schema element panels. */ protected Border PANEL_BORDER = new EmptyBorder(10, 10, 10, 10); /** * Adds a schema element selection listener. * @param listener the listener. */ public void addSchemaElementSelectionListener( SchemaElementSelectionListener listener) { listeners.add(listener); } /** * Removes a schema element selection listener. * @param listener the listener. */ public void removeSchemaElementSelectionListener( SchemaElementSelectionListener listener) { listeners.add(listener); } /** * Notifies to all the listeners that a new schema element was selected. * @param schemaElement the new schema element that has been selected. */ protected void notifySchemaSelectionListeners(Object schemaElement) { for (SchemaElementSelectionListener listener : listeners) { listener.schemaElementSelected( new SchemaElementSelectionEvent(this, schemaElement)); } } /** * Method used to know if there are unsaved changes or not. It is used by * the schema selection listener when the user changes the selection. * @return true if there are unsaved changes (and so the * selection of the schema should be canceled) and false * otherwise. */ public boolean mustCheckUnsavedChanges() { return false; } /** * Tells whether the user chose to save the changes in the panel, to not save * them or simply cancelled the selection in the tree. * @return the value telling whether the user chose to save the changes in the * panel, to not save them or simply cancelled the selection in the tree. */ public UnsavedChangesDialog.Result checkUnsavedChanges() { return UnsavedChangesDialog.Result.DO_NOT_SAVE; } /** * Method called when there is an object class selected in a list. * @param list the list. */ protected void objectClassSelected(JList list) { String o = (String)list.getSelectedValue(); Schema schema = getInfo().getServerDescriptor().getSchema(); if (o != null && schema != null) { ObjectClass oc = schema.getObjectClass(o); if (!oc.isPlaceHolder()) { notifySchemaSelectionListeners(oc); } } } /** * Returns the list of aliases for the provided attribute. * @param attr the attribute. * @return the list of aliases for the provided attribute. */ protected Set getAliases(AttributeType attr) { return getAliases(attr.getNames(), attr.getNameOrOID()); } /** * Returns the list of aliases for the provided object class. * @param oc the object class. * @return the list of aliases for the provided object class. */ protected Set getAliases(ObjectClass oc) { return getAliases(oc.getNames(), oc.getNameOrOID()); } private Set getAliases(Iterable names, String nameOrOid) { nameOrOid = nameOrOid != null ? nameOrOid : ""; final Set aliases = new LinkedHashSet<>(); for (String name : names) { if (!name.equalsIgnoreCase(nameOrOid)) { aliases.add(toLowerCase(name)); } } return aliases; } }