| | |
| | | private static final long serialVersionUID = -2680821576362341119L; |
| | | private static final LocalizableMessage NEW_BACKEND_TEXT = INFO_CTRL_PANEL_NEW_BACKEND_LABEL.get(); |
| | | |
| | | private JComboBox backends; |
| | | private JComboBox<?> backends; |
| | | private JTextField newBackend; |
| | | private JTextField baseDN; |
| | | private JRadioButton onlyCreateBaseEntry; |
| | |
| | | |
| | | private DocumentListener documentListener; |
| | | |
| | | |
| | | /** Default constructor. */ |
| | | public NewBaseDNPanel() |
| | | { |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LocalizableMessage getTitle() |
| | | { |
| | | return INFO_CTRL_PANEL_NEW_BASE_DN_TITLE.get(); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Component getPreferredFocusComponent() |
| | | { |
| | | return baseDN; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void toBeDisplayed(boolean visible) |
| | | { |
| | | if (visible) |
| | |
| | | add(lBackend, gbc); |
| | | } |
| | | |
| | | @SuppressWarnings({ "unchecked", "rawtypes" }) |
| | | private void addBackendNamesComboBox(GridBagConstraints gbc) |
| | | { |
| | | gbc.insets.left = 10; |
| | |
| | | add(newBackend, gbc); |
| | | ItemListener comboListener = new ItemListener() |
| | | { |
| | | @Override |
| | | public void itemStateChanged(ItemEvent ev) |
| | | { |
| | | Object o = backends.getSelectedItem(); |
| | |
| | | baseDN = Utilities.createTextField(); |
| | | documentListener = new DocumentListener() |
| | | { |
| | | @Override |
| | | public void changedUpdate(DocumentEvent ev) |
| | | { |
| | | String text = baseDN.getText().trim(); |
| | | setEnabledOK(text != null && text.length() > 0 && !errorPane.isVisible()); |
| | | } |
| | | |
| | | @Override |
| | | public void removeUpdate(DocumentEvent ev) |
| | | { |
| | | changedUpdate(ev); |
| | | } |
| | | |
| | | @Override |
| | | public void insertUpdate(DocumentEvent ev) |
| | | { |
| | | changedUpdate(ev); |
| | |
| | | ChangeListener listener = new ChangeListener() |
| | | { |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void stateChanged(ChangeEvent ev) |
| | | { |
| | | browseImportPath.setEnabled(importDataFromLDIF.isSelected()); |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void configurationChanged(ConfigurationChangeEvent ev) |
| | | { |
| | | ServerDescriptor desc = ev.getNewDescriptor(); |
| | | final SortedSet<String> sortedBackends = new TreeSet<String>(); |
| | | final SortedSet<String> sortedBackends = new TreeSet<>(); |
| | | for (BackendDescriptor backend : desc.getBackends()) |
| | | { |
| | | if (!backend.isConfigBackend()) |
| | |
| | | } |
| | | } |
| | | |
| | | ArrayList<Object> newElements = new ArrayList<Object>(sortedBackends); |
| | | List<Object> newElements = new ArrayList<Object>(sortedBackends); |
| | | if (!sortedBackends.isEmpty()) |
| | | { |
| | | newElements.add(COMBO_SEPARATOR); |
| | | } |
| | | newElements.add(NEW_BACKEND_TEXT); |
| | | super.updateComboBoxModel(newElements, (DefaultComboBoxModel) backends.getModel()); |
| | | super.updateComboBoxModel(newElements, (DefaultComboBoxModel<?>) backends.getModel()); |
| | | updateErrorPaneAndOKButtonIfAuthRequired(desc, |
| | | isLocal() ? INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_FOR_CREATE_BASE_DN.get() |
| | | : INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(desc.getHostname())); |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | lRemoteFileHelp.setVisible(!isLocal()); |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void cancelClicked() |
| | | { |
| | | resetLabelAsValid(); |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | protected void checkOKButtonEnable() |
| | | { |
| | | documentListener.changedUpdate(null); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void okClicked() |
| | | { |
| | | resetLabelAsValid(); |
| | | |
| | | final Set<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>(); |
| | | final Set<LocalizableMessage> errors = new LinkedHashSet<>(); |
| | | final ServerDescriptor desc = getInfo().getServerDescriptor(); |
| | | final Set<BackendDescriptor> existingBackends = desc.getBackends(); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** Returns the existing or the new backend name, once user have clicked on 'OK' button */ |
| | | /** Returns the existing or the new backend name, once user have clicked on 'OK' button. */ |
| | | private String validateBackendName( |
| | | final Set<BackendDescriptor> existingBackends, final Set<LocalizableMessage> errors) |
| | | { |
| | |
| | | if (importAutomaticallyGenerated.isSelected()) |
| | | { |
| | | final int minValue = 1; |
| | | final int maxValue = isLocal() ? MAX_ENTRIES_NUMBER_GENERATED_LOCAL |
| | | : MAX_ENTRIES_NUMBER_GENERATED; |
| | | final int maxValue = isLocal() ? MAX_ENTRIES_NUMBER_GENERATED_LOCAL : MAX_ENTRIES_NUMBER_GENERATED; |
| | | final LocalizableMessage errorMsg = ERR_NUMBER_OF_ENTRIES_INVALID.get(minValue, maxValue); |
| | | if (!checkIntValue(errors, numberOfEntries.getText(), minValue, maxValue, errorMsg)) |
| | | { |
| | |
| | | { |
| | | return backendName.toString(); |
| | | } |
| | | else |
| | | { |
| | | |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | private boolean isNewBackend() |
| | | { |
| | |
| | | /** The task in charge of creating the base DN (and if required, the backend). */ |
| | | protected class NewBaseDNTask extends Task |
| | | { |
| | | Set<String> backendSet; |
| | | private String newBaseDN; |
| | | private final Set<String> backendSet; |
| | | private final String newBaseDN; |
| | | private int progressAfterConfigurationUpdate = -1; |
| | | |
| | | /** |
| | |
| | | public NewBaseDNTask(ControlPanelInfo info, ProgressDialog dlg) |
| | | { |
| | | super(info, dlg); |
| | | backendSet = new HashSet<String>(); |
| | | backendSet = new HashSet<>(); |
| | | backendSet.add(getBackendName()); |
| | | newBaseDN = baseDN.getText(); |
| | | |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Type getType() |
| | | { |
| | | return Type.NEW_BASEDN; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LocalizableMessage getTaskDescription() |
| | | { |
| | | return INFO_CTRL_PANEL_NEW_BASE_DN_TASK_DESCRIPTION.get(newBaseDN, backendSet.iterator().next()); |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public boolean canLaunch(Task taskToBeLaunched, Collection<LocalizableMessage> incompatibilityReasons) |
| | | { |
| | | boolean canLaunch = true; |
| | |
| | | * @return the arguments of the command-line that can be used to generate |
| | | * the data. |
| | | */ |
| | | private ArrayList<String> getDataCommandLineArguments(String ldifFile, boolean useTemplate) |
| | | private List<String> getDataCommandLineArguments(String ldifFile, boolean useTemplate) |
| | | { |
| | | ArrayList<String> args = new ArrayList<String>(); |
| | | List<String> args = new ArrayList<>(); |
| | | if (!leaveDatabaseEmpty.isSelected()) |
| | | { |
| | | if (isLocal()) |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | List<String> args = getObfuscatedCommandLineArguments(getDSConfigCommandLineArguments()); |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | LocalizableMessage msg = INFO_CTRL_PANEL_CREATING_BACKEND_PROGRESS.get(getBackendName(), newBaseDN); |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | LocalizableMessage msg = INFO_CTRL_PANEL_CREATING_BASE_DN_PROGRESS.get(newBaseDN, getBackendName()); |
| | |
| | | |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | getProgressDialog().appendProgressHtml( |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | getProgressDialog().getProgressBar().setIndeterminate(false); |
| | |
| | | final String cmdLine = getDataCommandLineToDisplay(); |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | progressDialog.appendProgressHtml(Utilities.applyFont( |
| | | "Equivalent command line:<br><b>" + cmdLine + "</b><br><br>", ColorAndFontConstants.progressFont)); |
| | | progressDialog.appendProgressHtml(Utilities.applyFont("Equivalent command line:<br><b>" + cmdLine |
| | | + "</b><br><br>", ColorAndFontConstants.progressFont)); |
| | | } |
| | | }); |
| | | } |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | progressDialog.appendProgressHtml(Utilities.getProgressWithPoints( |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | if (isLocal()) |
| | |
| | | ldifFile = tempFile.getAbsolutePath(); |
| | | |
| | | // Create the LDIF file locally using make-ldif |
| | | ArrayList<String> makeLDIFArgs = new ArrayList<String>(); |
| | | List<String> makeLDIFArgs = new ArrayList<>(); |
| | | makeLDIFArgs.add("--templateFile"); |
| | | makeLDIFArgs.add(f.getAbsolutePath()); |
| | | makeLDIFArgs.add("--ldifFile"); |
| | |
| | | } |
| | | } |
| | | |
| | | ArrayList<String> arguments = getDataCommandLineArguments(ldifFile, generateData); |
| | | List<String> arguments = getDataCommandLineArguments(ldifFile, generateData); |
| | | String[] args = new String[arguments.size()]; |
| | | arguments.toArray(args); |
| | | if (createBaseEntry || !isLocal()) |
| | |
| | | { |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | progressDialog.appendProgressHtml(Utilities.getProgressDone(ColorAndFontConstants.progressFont)); |
| | |
| | | LocalDBBackendCfgClient backend = root.createBackend(provider, backendName, null); |
| | | backend.setEnabled(true); |
| | | |
| | | Set<DN> baseDNs = new HashSet<DN>(); |
| | | Set<DN> baseDNs = new HashSet<>(); |
| | | baseDNs.add(DN.valueOf(baseDN)); |
| | | backend.setBaseDN(baseDNs); |
| | | backend.setBackendId(backendName); |
| | |
| | | |
| | | private void createAdditionalIndexes(InitialLdapContext ctx, String backendName) throws OpenDsException |
| | | { |
| | | List<List<String>> argsArray = new ArrayList<List<String>>(); |
| | | List<String> dns = new ArrayList<String>(); |
| | | List<Attributes> attributes = new ArrayList<Attributes>(); |
| | | List<List<String>> argsArray = new ArrayList<>(); |
| | | List<String> dns = new ArrayList<>(); |
| | | List<Attributes> attributes = new ArrayList<>(); |
| | | |
| | | // Instead of adding indexes using management framework, use this approach |
| | | // so that we have to define the additional indexes only in the method |
| | |
| | | Entry indexEntry; |
| | | while ((indexEntry = reader.readEntry()) != null) |
| | | { |
| | | List<String> args = new ArrayList<String>(); |
| | | List<String> args = new ArrayList<>(); |
| | | args.add("create-local-db-index"); |
| | | args.add("--backend-name"); |
| | | args.add(backendName); |
| | |
| | | final String cmdLines = sb.toString(); |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | getProgressDialog().appendProgressHtml(Utilities.applyFont( |
| | |
| | | |
| | | SwingUtilities.invokeLater(new Runnable() |
| | | { |
| | | @Override |
| | | public void run() |
| | | { |
| | | getProgressDialog().appendProgressHtml( |
| | |
| | | |
| | | private void addBaseDN(String backendName, String baseDN) throws OpenDsException, ConfigException |
| | | { |
| | | LinkedList<DN> baseDNs = new LinkedList<DN>(); |
| | | List<DN> baseDNs = new LinkedList<>(); |
| | | for (BackendDescriptor backend : getInfo().getServerDescriptor().getBackends()) |
| | | { |
| | | if (backend.getBackendID().equalsIgnoreCase(backendName)) |
| | |
| | | String dn = Utilities.getRDNString("ds-cfg-backend-id", backendName) + ",cn=Backends,cn=config"; |
| | | ConfigEntry configEntry = DirectoryServer.getConfigHandler().getConfigEntry(DN.valueOf(dn)); |
| | | |
| | | DNConfigAttribute baseDNAttr = |
| | | new DNConfigAttribute( |
| | | DNConfigAttribute baseDNAttr = new DNConfigAttribute( |
| | | ConfigConstants.ATTR_BACKEND_BASE_DN, INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get(), |
| | | true, true, false, baseDNs); |
| | | configEntry.putConfigAttribute(baseDNAttr); |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | protected String getCommandLinePath() |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | protected ArrayList<String> getCommandLineArguments() |
| | | @Override |
| | | protected List<String> getCommandLineArguments() |
| | | { |
| | | return new ArrayList<String>(); |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | private String getConfigCommandLineFullPath() |
| | |
| | | return isServerRunning() ? getCommandLinePath("dsconfig") : null; |
| | | } |
| | | |
| | | private ArrayList<String> getDSConfigCommandLineArguments() |
| | | private List<String> getDSConfigCommandLineArguments() |
| | | { |
| | | ArrayList<String> args = new ArrayList<String>(); |
| | | List<String> args = new ArrayList<>(); |
| | | if (isServerRunning()) |
| | | { |
| | | if (isNewBackend()) |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void runTask() |
| | | { |
| | | state = State.RUNNING; |
| | |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public Set<String> getBackends() |
| | | { |
| | | return backendSet; |