Example usage for java.util SortedMap keySet

List of usage examples for java.util SortedMap keySet

Introduction

In this page you can find the example usage for java.util SortedMap keySet.

Prototype

Set<K> keySet();

Source Link

Document

Returns a Set view of the keys contained in this map.

Usage

From source file:com.google.cloud.dns.testing.LocalDnsHelper.java

/**
 * Applies changes to a zone. Repeatedly tries until succeeds. Thread safe and deadlock safe.
 *///w  w  w  . j a  v a 2s  .co m
private void applyExistingChange(String projectId, String zoneName, String changeId) {
    Change change = findChange(projectId, zoneName, changeId);
    if (change == null) {
        return; // no such change exists, nothing to do
    }
    ZoneContainer wrapper = findZone(projectId, zoneName);
    if (wrapper == null) {
        return; // no such zone exists; it might have been deleted by another thread
    }
    AtomicReference<ImmutableSortedMap<String, ResourceRecordSet>> dnsRecords = wrapper.dnsRecords();
    while (true) {
        // managed zone must have a set of records which is not null
        ImmutableSortedMap<String, ResourceRecordSet> original = dnsRecords.get();
        // the copy will be populated when handling deletions
        SortedMap<String, ResourceRecordSet> copy = new TreeMap<>();
        // apply deletions first
        List<ResourceRecordSet> deletions = change.getDeletions();
        if (deletions != null) {
            for (Map.Entry<String, ResourceRecordSet> entry : original.entrySet()) {
                if (!deletions.contains(entry.getValue())) {
                    copy.put(entry.getKey(), entry.getValue());
                }
            }
        } else {
            copy.putAll(original);
        }
        // apply additions
        List<ResourceRecordSet> additions = change.getAdditions();
        if (additions != null) {
            for (ResourceRecordSet addition : additions) {
                ResourceRecordSet rrset = new ResourceRecordSet();
                rrset.setName(addition.getName());
                rrset.setRrdatas(ImmutableList.copyOf(addition.getRrdatas()));
                rrset.setTtl(addition.getTtl());
                rrset.setType(addition.getType());
                String id = getUniqueId(copy.keySet());
                copy.put(id, rrset);
            }
        }
        boolean success = dnsRecords.compareAndSet(original, ImmutableSortedMap.copyOf(copy));
        if (success) {
            break; // success if no other thread modified the value in the meantime
        }
    }
    change.setStatus("done");
}

From source file:com.google.gwt.emultest.java.util.TreeMapTest.java

/**
 * Verify that two SortedMaps are deeply equivalent.
 *
 * @param expected/*w w w  .j  av a  2 s . co  m*/
 * @param actual
 */
private static <K, V> void _assertEquals(SortedMap<K, V> expected, SortedMap<K, V> actual) {
    _assertEquals((Map<K, V>) expected, (Map<K, V>) actual);

    // verify the order of the associated collections
    assertEquals(expected.keySet().toArray(), actual.keySet().toArray());
    assertEquals(expected.entrySet().toArray(), actual.entrySet().toArray());
    assertEquals(expected.values().toArray(), actual.values().toArray());
}

From source file:org.rapla.storage.impl.server.LocalAbstractCachableOperator.java

private Collection<ReferenceInfo> getEntities(User user, final Date timestamp, boolean isDelete)
        throws RaplaException {
    DeleteUpdateEntry fromElement = new DeleteUpdateEntry();
    Class<? extends Entity> type = Allocatable.class;
    String dummyId = "";
    fromElement.reference = new ReferenceInfo(dummyId, type);
    fromElement.timestamp = timestamp;//from   w w w.  java 2  s.co  m
    LinkedList<ReferenceInfo> result = new LinkedList<ReferenceInfo>();

    Lock lock = readLock();
    try {
        SortedMap<DeleteUpdateEntry, String> tailMap = deleteUpdateSet.inverseBidiMap().tailMap(fromElement);
        Set<DeleteUpdateEntry> tailSet = tailMap.keySet();
        for (DeleteUpdateEntry entry : tailSet) {
            if (entry.isDelete != isDelete) {
                continue;
            }
            if (isAffected(entry, user)) {
                ReferenceInfo deletedReference = entry.reference;
                result.add(deletedReference);
            }
        }
    } finally {
        unlock(lock);
    }
    return result;
}

From source file:org.wso2.carbon.ml.database.internal.MLDatabaseService.java

/**
 * Create the JSON string with summary statistics for a column.
 *
 * @param type Data-type of the column/*from w w w  .  j  a v  a  2 s.c  om*/
 * @param graphFrequencies Bin frequencies of the column
 * @param missing Number of missing values in the column
 * @param unique Number of unique values in the column
 * @param descriptiveStats DescriptiveStats object of the column
 * @return JSON representation of the summary statistics of the column
 */
private JSONArray createJson(String type, SortedMap<?, Integer> graphFrequencies, int missing, int unique,
        DescriptiveStatistics descriptiveStats) throws JSONException {

    JSONObject json = new JSONObject();
    JSONArray freqs = new JSONArray();
    Object[] categoryNames = graphFrequencies.keySet().toArray();
    // Create an array with intervals/categories and their frequencies.
    for (int i = 0; i < graphFrequencies.size(); i++) {
        JSONArray temp = new JSONArray();
        temp.put(categoryNames[i].toString());
        temp.put(graphFrequencies.get(categoryNames[i]));
        freqs.put(temp);
    }
    // Put the statistics to a json object
    json.put("unique", unique);
    json.put("missing", missing);

    DecimalFormat decimalFormat = new DecimalFormat("#.###");
    if (descriptiveStats.getN() != 0) {
        json.put("mean", decimalFormat.format(descriptiveStats.getMean()));
        json.put("min", decimalFormat.format(descriptiveStats.getMin()));
        json.put("max", decimalFormat.format(descriptiveStats.getMax()));
        json.put("median", decimalFormat.format(descriptiveStats.getPercentile(50)));
        json.put("std", decimalFormat.format(descriptiveStats.getStandardDeviation()));
        if (type.equalsIgnoreCase(FeatureType.NUMERICAL)) {
            json.put("skewness", decimalFormat.format(descriptiveStats.getSkewness()));
        }
    }
    json.put("values", freqs);
    json.put("bar", true);
    json.put("key", "Frequency");
    JSONArray summaryStatArray = new JSONArray();
    summaryStatArray.put(json);
    return summaryStatArray;
}

From source file:org.apache.accumulo.tserver.tablet.Tablet.java

private CompactionStats _majorCompact(MajorCompactionReason reason)
        throws IOException, CompactionCanceledException {

    long t1, t2, t3;

    Pair<Long, UserCompactionConfig> compactionId = null;
    CompactionStrategy strategy = null;// ww  w  .j  av a2s.co  m
    Map<FileRef, Pair<Key, Key>> firstAndLastKeys = null;

    if (reason == MajorCompactionReason.USER) {
        try {
            compactionId = getCompactionID();
            strategy = createCompactionStrategy(compactionId.getSecond().getCompactionStrategy());
        } catch (NoNodeException e) {
            throw new RuntimeException(e);
        }
    } else if (reason == MajorCompactionReason.NORMAL || reason == MajorCompactionReason.IDLE) {
        strategy = Property.createTableInstanceFromPropertyName(tableConfiguration,
                Property.TABLE_COMPACTION_STRATEGY, CompactionStrategy.class, new DefaultCompactionStrategy());
        strategy.init(Property.getCompactionStrategyOptions(tableConfiguration));
    } else if (reason == MajorCompactionReason.CHOP) {
        firstAndLastKeys = getFirstAndLastKeys(getDatafileManager().getDatafileSizes());
    } else {
        throw new IllegalArgumentException("Unknown compaction reason " + reason);
    }

    if (strategy != null) {
        MajorCompactionRequest request = new MajorCompactionRequest(extent, reason,
                getTabletServer().getFileSystem(), tableConfiguration);
        request.setFiles(getDatafileManager().getDatafileSizes());
        strategy.gatherInformation(request);
    }

    Map<FileRef, DataFileValue> filesToCompact = null;

    int maxFilesToCompact = tableConfiguration.getCount(Property.TSERV_MAJC_THREAD_MAXOPEN);

    CompactionStats majCStats = new CompactionStats();
    CompactionPlan plan = null;

    boolean propogateDeletes = false;
    boolean updateCompactionID = false;

    synchronized (this) {
        // plan all that work that needs to be done in the sync block... then do the actual work
        // outside the sync block

        t1 = System.currentTimeMillis();

        majorCompactionState = CompactionState.WAITING_TO_START;

        getTabletMemory().waitForMinC();

        t2 = System.currentTimeMillis();

        majorCompactionState = CompactionState.IN_PROGRESS;
        notifyAll();

        VolumeManager fs = getTabletServer().getFileSystem();
        if (extent.isRootTablet()) {
            // very important that we call this before doing major compaction,
            // otherwise deleted compacted files could possible be brought back
            // at some point if the file they were compacted to was legitimately
            // removed by a major compaction
            RootFiles.cleanupReplacement(fs, fs.listStatus(this.location), false);
        }
        SortedMap<FileRef, DataFileValue> allFiles = getDatafileManager().getDatafileSizes();
        List<FileRef> inputFiles = new ArrayList<FileRef>();
        if (reason == MajorCompactionReason.CHOP) {
            // enforce rules: files with keys outside our range need to be compacted
            inputFiles.addAll(findChopFiles(extent, firstAndLastKeys, allFiles.keySet()));
        } else {
            MajorCompactionRequest request = new MajorCompactionRequest(extent, reason, fs, tableConfiguration);
            request.setFiles(allFiles);
            plan = strategy.getCompactionPlan(request);
            if (plan != null) {
                plan.validate(allFiles.keySet());
                inputFiles.addAll(plan.inputFiles);
            }
        }

        if (inputFiles.isEmpty()) {
            if (reason == MajorCompactionReason.USER) {
                if (compactionId.getSecond().getIterators().isEmpty()) {
                    log.debug("No-op major compaction by USER on 0 input files because no iterators present.");
                    lastCompactID = compactionId.getFirst();
                    updateCompactionID = true;
                } else {
                    log.debug("Major compaction by USER on 0 input files with iterators.");
                    filesToCompact = new HashMap<>();
                }
            } else {
                return majCStats;
            }
        } else {
            // If no original files will exist at the end of the compaction, we do not have to propogate deletes
            Set<FileRef> droppedFiles = new HashSet<>();
            droppedFiles.addAll(inputFiles);
            if (plan != null)
                droppedFiles.addAll(plan.deleteFiles);
            propogateDeletes = !(droppedFiles.equals(allFiles.keySet()));
            log.debug("Major compaction plan: " + plan + " propogate deletes : " + propogateDeletes);
            filesToCompact = new HashMap<>(allFiles);
            filesToCompact.keySet().retainAll(inputFiles);

            getDatafileManager().reserveMajorCompactingFiles(filesToCompact.keySet());
        }

        t3 = System.currentTimeMillis();
    }

    try {

        log.debug(String.format("MajC initiate lock %.2f secs, wait %.2f secs", (t3 - t2) / 1000.0,
                (t2 - t1) / 1000.0));

        if (updateCompactionID) {
            MetadataTableUtil.updateTabletCompactID(extent, compactionId.getFirst(), tabletServer,
                    getTabletServer().getLock());
            return majCStats;
        }

        if (!propogateDeletes && compactionId == null) {
            // compacting everything, so update the compaction id in metadata
            try {
                compactionId = getCompactionID();
                if (compactionId.getSecond().getCompactionStrategy() != null) {
                    compactionId = null;
                    // TODO maybe return unless chop?
                }

            } catch (NoNodeException e) {
                throw new RuntimeException(e);
            }
        }

        List<IteratorSetting> compactionIterators = new ArrayList<IteratorSetting>();
        if (compactionId != null) {
            if (reason == MajorCompactionReason.USER) {
                if (getCompactionCancelID() >= compactionId.getFirst()) {
                    // compaction was canceled
                    return majCStats;
                }
                compactionIterators = compactionId.getSecond().getIterators();

                synchronized (this) {
                    if (lastCompactID >= compactionId.getFirst())
                        // already compacted
                        return majCStats;
                }
            }

        }

        // need to handle case where only one file is being major compacted
        // ACCUMULO-3645 run loop at least once, even if filesToCompact.isEmpty()
        do {
            int numToCompact = maxFilesToCompact;

            if (filesToCompact.size() > maxFilesToCompact && filesToCompact.size() < 2 * maxFilesToCompact) {
                // on the second to last compaction pass, compact the minimum amount of files possible
                numToCompact = filesToCompact.size() - maxFilesToCompact + 1;
            }

            Set<FileRef> smallestFiles = removeSmallest(filesToCompact, numToCompact);

            FileRef fileName = getNextMapFilename(
                    (filesToCompact.size() == 0 && !propogateDeletes) ? "A" : "C");
            FileRef compactTmpName = new FileRef(fileName.path().toString() + "_tmp");

            AccumuloConfiguration tableConf = createTableConfiguration(tableConfiguration, plan);

            Span span = Trace.start("compactFiles");

            try {
                CompactionEnv cenv = new CompactionEnv() {
                    @Override
                    public boolean isCompactionEnabled() {
                        return Tablet.this.isCompactionEnabled();
                    }

                    @Override
                    public IteratorScope getIteratorScope() {
                        return IteratorScope.majc;
                    }

                    @Override
                    public RateLimiter getReadLimiter() {
                        return getTabletServer().getMajorCompactionReadLimiter();
                    }

                    @Override
                    public RateLimiter getWriteLimiter() {
                        return getTabletServer().getMajorCompactionWriteLimiter();
                    }

                };

                HashMap<FileRef, DataFileValue> copy = new HashMap<FileRef, DataFileValue>(
                        getDatafileManager().getDatafileSizes());
                if (!copy.keySet().containsAll(smallestFiles))
                    throw new IllegalStateException("Cannot find data file values for " + smallestFiles);

                copy.keySet().retainAll(smallestFiles);

                log.debug("Starting MajC " + extent + " (" + reason + ") " + copy.keySet() + " --> "
                        + compactTmpName + "  " + compactionIterators);

                // always propagate deletes, unless last batch
                boolean lastBatch = filesToCompact.isEmpty();
                Compactor compactor = new Compactor(tabletServer, this, copy, null, compactTmpName,
                        lastBatch ? propogateDeletes : true, cenv, compactionIterators, reason.ordinal(),
                        tableConf);

                CompactionStats mcs = compactor.call();

                span.data("files", "" + smallestFiles.size());
                span.data("read", "" + mcs.getEntriesRead());
                span.data("written", "" + mcs.getEntriesWritten());
                majCStats.add(mcs);

                if (lastBatch && plan != null && plan.deleteFiles != null) {
                    smallestFiles.addAll(plan.deleteFiles);
                }
                getDatafileManager().bringMajorCompactionOnline(smallestFiles, compactTmpName, fileName,
                        filesToCompact.size() == 0 && compactionId != null ? compactionId.getFirst() : null,
                        new DataFileValue(mcs.getFileSize(), mcs.getEntriesWritten()));

                // when major compaction produces a file w/ zero entries, it will be deleted... do not want
                // to add the deleted file
                if (filesToCompact.size() > 0 && mcs.getEntriesWritten() > 0) {
                    filesToCompact.put(fileName, new DataFileValue(mcs.getFileSize(), mcs.getEntriesWritten()));
                }
            } finally {
                span.stop();
            }

        } while (filesToCompact.size() > 0);
        return majCStats;
    } finally {
        synchronized (Tablet.this) {
            getDatafileManager().clearMajorCompactingFile();
        }
    }
}

From source file:org.dbgl.gui.SettingsDialog.java

protected void createContents() {
    shell = new Shell(getParent(), SWT.TITLE | SWT.CLOSE | SWT.BORDER | SWT.RESIZE | SWT.APPLICATION_MODAL);
    shell.setLayout(new BorderLayout(0, 0));
    shell.addControlListener(new SizeControlAdapter(shell, "settingsdialog"));
    shell.setText(settings.msg("dialog.settings.title"));

    final TabFolder tabFolder = new TabFolder(shell, SWT.NONE);

    final TabItem generalTabItem = new TabItem(tabFolder, SWT.NONE);
    generalTabItem.setText(settings.msg("dialog.settings.tab.general"));

    final Composite composite = new Composite(tabFolder, SWT.NONE);
    composite.setLayout(new GridLayout());
    generalTabItem.setControl(composite);

    final Group dosboxGroup = new Group(composite, SWT.NONE);
    dosboxGroup.setText(settings.msg("dialog.settings.dosbox"));
    dosboxGroup.setLayout(new GridLayout(2, false));

    final Label showConsoleLabel = new Label(dosboxGroup, SWT.NONE);
    showConsoleLabel.setText(settings.msg("dialog.settings.hidestatuswindow"));

    final Button console = new Button(dosboxGroup, SWT.CHECK);
    console.setSelection(conf.getBooleanValue("dosbox", "hideconsole"));

    final Group sendToGroup = new Group(composite, SWT.NONE);
    sendToGroup.setText(settings.msg("dialog.settings.sendto"));
    sendToGroup.setLayout(new GridLayout(2, false));

    final Label enableCommLabel = new Label(sendToGroup, SWT.NONE);
    enableCommLabel.setText(settings.msg("dialog.settings.enableport"));

    final Button portEnabled = new Button(sendToGroup, SWT.CHECK);
    portEnabled.setSelection(conf.getBooleanValue("communication", "port_enabled"));
    portEnabled.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            port.setEnabled(portEnabled.getSelection());
        }//from ww  w.j a v a  2  s .  com
    });

    final Label portnumberLabel = new Label(sendToGroup, SWT.NONE);
    portnumberLabel.setText(settings.msg("dialog.settings.port"));

    port = new Text(sendToGroup, SWT.BORDER);
    port.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    port.setText(conf.getValue("communication", "port"));
    port.setEnabled(portEnabled.getSelection());

    final Group profileDefGroup = new Group(composite, SWT.NONE);
    profileDefGroup.setText(settings.msg("dialog.settings.profiledefaults"));
    profileDefGroup.setLayout(new GridLayout(3, false));

    final Label configFileLabel = new Label(profileDefGroup, SWT.NONE);
    configFileLabel.setText(settings.msg("dialog.settings.configfile"));

    confLocation = new Combo(profileDefGroup, SWT.READ_ONLY);
    confLocation.setItems(confLocations);
    confLocation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    confLocation.select(conf.getIntValue("profiledefaults", "confpath"));

    confFilename = new Combo(profileDefGroup, SWT.READ_ONLY);
    confFilename.setItems(confFilenames);
    confFilename.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    confFilename.select(conf.getIntValue("profiledefaults", "conffile"));

    final Group i18nGroup = new Group(composite, SWT.NONE);
    i18nGroup.setText(settings.msg("dialog.settings.i18n"));
    i18nGroup.setLayout(new GridLayout(2, false));

    final Label languageLabel = new Label(i18nGroup, SWT.NONE);
    languageLabel.setText(settings.msg("dialog.settings.languagecountry"));

    localeCombo = new Combo(i18nGroup, SWT.READ_ONLY);
    Locale locale = new Locale(conf.getValue("locale", "language"), conf.getValue("locale", "country"),
            conf.getValue("locale", "variant"));

    final SortedMap<String, Locale> locales = new TreeMap<String, Locale>();
    String locString = "";

    java.util.List<String> supportedLanguages = new ArrayList<String>(SUPPORTED_LANGUAGES);
    File[] files = new File("./plugins/i18n").listFiles();
    if (files != null) {
        for (File file : files) {
            String name = file.getName();
            if (name.startsWith("MessagesBundle_") && name.endsWith(".properties")) {
                String code = name.substring("MessagesBundle_".length(), name.indexOf(".properties"));
                if (code.length() > 0) {
                    supportedLanguages.add(code);
                }
            }
        }
    }

    for (String lang : supportedLanguages) {
        Locale loc = allLocales.get(lang);
        String variant = null;
        if (loc == null && StringUtils.countMatches(lang, "_") == 2) {
            String langWithoutVariant = StringUtils.removeEnd(StringUtils.substringBeforeLast(lang, "_"), "_");
            variant = StringUtils.substringAfterLast(lang, "_");
            loc = allLocales.get(langWithoutVariant);
        }
        if (loc != null) {
            StringBuffer s = new StringBuffer(loc.getDisplayLanguage(Locale.getDefault()));
            if (loc.getCountry().length() > 0)
                s.append(" - ").append(loc.getDisplayCountry(Locale.getDefault()));
            if (variant != null) {
                s.append(" (").append(variant).append(')');
                loc = new Locale(loc.getLanguage(), loc.getCountry(), variant);
            }
            locales.put(s.toString(), loc);
            if (loc.equals(locale)) {
                locString = s.toString();
            }
        }
    }

    for (String sloc : locales.keySet()) {
        localeCombo.add(sloc);
    }
    localeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    localeCombo.setText(locString);
    localeCombo.setVisibleItemCount(20);

    columnsTabItem = new TabItem(tabFolder, SWT.NONE);
    columnsTabItem.setText(settings.msg("dialog.settings.tab.profiletable"));

    final Composite composite2 = new Composite(tabFolder, SWT.NONE);
    composite2.setLayout(new BorderLayout(0, 0));
    columnsTabItem.setControl(composite2);

    final Group visColumnsGroup = new Group(composite2, SWT.NONE);
    visColumnsGroup.setLayout(new FillLayout());
    visColumnsGroup.setText(settings.msg("dialog.settings.visiblecolunms"));

    visible_columns = new Table(visColumnsGroup, SWT.FULL_SELECTION | SWT.BORDER | SWT.CHECK);
    visible_columns.setLinesVisible(true);

    TableColumn column1 = new TableColumn(visible_columns, SWT.NONE);
    column1.setWidth(350);

    java.util.List<Integer> visibleColumnIDs = new ArrayList<Integer>();
    for (int i = 0; i < MainWindow.columnNames.length; i++)
        if (conf.getBooleanValue("gui", "column" + (i + 1) + "visible"))
            visibleColumnIDs.add(i);
    java.util.List<Integer> orderedVisibleColumnIDs = new ArrayList<Integer>();
    int[] columnOrder = conf.getIntValues("gui", "columnorder");
    for (int i = 0; i < columnOrder.length; i++)
        orderedVisibleColumnIDs.add(visibleColumnIDs.get(columnOrder[i]));
    java.util.List<Integer> remainingColumnIDs = new ArrayList<Integer>();
    for (int i = 0; i < MainWindow.columnNames.length; i++)
        if (!orderedVisibleColumnIDs.contains(i))
            remainingColumnIDs.add(i);
    allColumnIDs = new ArrayList<Integer>(orderedVisibleColumnIDs);
    allColumnIDs.addAll(remainingColumnIDs);

    visibleColumns = new TableItem[MainWindow.columnNames.length];

    for (int i = 0; i < MainWindow.columnNames.length; i++) {
        visibleColumns[i] = new TableItem(visible_columns, SWT.BORDER);
        visibleColumns[i].setText(MainWindow.columnNames[allColumnIDs.get(i)]);
        visibleColumns[i]
                .setChecked(conf.getBooleanValue("gui", "column" + (allColumnIDs.get(i) + 1) + "visible"));
    }

    final TableEditor editor = new TableEditor(visible_columns);
    editor.horizontalAlignment = SWT.LEFT;
    editor.grabHorizontal = true;
    editor.minimumWidth = 50;

    visible_columns.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            // Clean up any previous editor control
            Control oldEditor = editor.getEditor();
            if (oldEditor != null) {
                oldEditor.dispose();
            }

            // Identify the selected row
            TableItem item = (TableItem) event.item;
            if (item == null) {
                return;
            }
            int selIdx = item.getParent().getSelectionIndex();
            if (selIdx == -1)
                return;
            int idx = allColumnIDs.get(selIdx);
            if (idx < Constants.RO_COLUMN_NAMES
                    || idx >= (Constants.RO_COLUMN_NAMES + Constants.EDIT_COLUMN_NAMES))
                return;

            // The control that will be the editor must be a child of the table
            Text newEditor = new Text(visible_columns, SWT.NONE);
            newEditor.setText(item.getText(EDITABLE_COLUMN));
            newEditor.addModifyListener(new ModifyListener() {
                public void modifyText(final ModifyEvent mEvent) {
                    Text text = (Text) editor.getEditor();
                    editor.getItem().setText(EDITABLE_COLUMN, text.getText());
                }
            });
            newEditor.selectAll();
            newEditor.setFocus();
            editor.setEditor(newEditor, item, EDITABLE_COLUMN);
        }
    });

    final Group addProfGroup = new Group(composite2, SWT.NONE);
    addProfGroup.setLayout(new GridLayout(2, false));
    addProfGroup.setText(settings.msg("dialog.settings.addeditduplicateprofile"));
    addProfGroup.setLayoutData(BorderLayout.SOUTH);

    final Label autoSortLabel = new Label(addProfGroup, SWT.NONE);
    autoSortLabel.setText(settings.msg("dialog.settings.autosort"));

    final Button autosort = new Button(addProfGroup, SWT.CHECK);
    autosort.setSelection(conf.getBooleanValue("gui", "autosortonupdate"));

    final TabItem dynTabItem = new TabItem(tabFolder, SWT.NONE);
    dynTabItem.setText(settings.msg("dialog.settings.tab.dynamicoptions"));

    final Composite composite_1 = new Composite(tabFolder, SWT.NONE);
    composite_1.setLayout(new FillLayout());
    dynTabItem.setControl(composite_1);

    final Group dynOptionsGroup = new Group(composite_1, SWT.NONE);
    dynOptionsGroup.setLayout(new GridLayout(2, false));
    dynOptionsGroup.setText(settings.msg("dialog.settings.dynamicoptions"));

    final Label optionsLabel = new Label(dynOptionsGroup, SWT.NONE);
    optionsLabel.setText(settings.msg("dialog.settings.options"));

    final Label valuesLabel = new Label(dynOptionsGroup, SWT.NONE);
    valuesLabel.setText(settings.msg("dialog.settings.values"));

    options = new List(dynOptionsGroup, SWT.V_SCROLL | SWT.BORDER);
    options.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            storeValues();
            previousSelection = options.getSelectionIndex();
            if (previousSelection != -1) {
                values.setText(conf.getMultilineValues("profile", options.getItem(previousSelection),
                        values.getLineDelimiter()));
            }
        }
    });
    options.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    for (String s : conf.getAllItemNames("profile")) {
        options.add(s);
    }

    values = new Text(dynOptionsGroup, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
    values.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    final TabItem guiTabItem = new TabItem(tabFolder, SWT.NONE);
    guiTabItem.setText(settings.msg("dialog.settings.tab.gui"));
    final Composite composite1 = new Composite(tabFolder, SWT.NONE);
    composite1.setLayout(new GridLayout(2, false));
    guiTabItem.setControl(composite1);
    Group screenshots = new Group(composite1, SWT.NONE);
    screenshots.setLayout(new GridLayout(3, false));
    GridData screenshotsLData = new GridData();
    screenshotsLData.grabExcessHorizontalSpace = true;
    screenshotsLData.horizontalAlignment = GridData.FILL;
    screenshotsLData.horizontalSpan = 2;
    screenshots.setLayoutData(screenshotsLData);
    screenshots.setText(settings.msg("dialog.settings.screenshots"));
    Label heightLabel = new Label(screenshots, SWT.NONE);
    heightLabel.setText(settings.msg("dialog.settings.height"));
    GridData sshotsHeightData = new GridData();
    sshotsHeightData.grabExcessHorizontalSpace = true;
    sshotsHeightData.horizontalAlignment = GridData.FILL;
    screenshotsHeight = new Scale(screenshots, SWT.NONE);
    screenshotsHeight.setMaximum(750);
    screenshotsHeight.setMinimum(50);
    screenshotsHeight.setLayoutData(sshotsHeightData);
    screenshotsHeight.setIncrement(25);
    screenshotsHeight.setPageIncrement(100);
    screenshotsHeight.setSelection(conf.getIntValue("gui", "screenshotsheight"));
    screenshotsHeight.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent evt) {
            heightValue.setText(screenshotsHeight.getSelection() + settings.msg("dialog.settings.px"));
            heightValue.pack();
        }
    });
    heightValue = new Label(screenshots, SWT.NONE);
    heightValue.setText(screenshotsHeight.getSelection() + settings.msg("dialog.settings.px"));

    final Label displayFilenameLabel = new Label(screenshots, SWT.NONE);
    displayFilenameLabel.setText(settings.msg("dialog.settings.screenshotsfilename"));
    final Button displayFilename = new Button(screenshots, SWT.CHECK);
    displayFilename.setSelection(conf.getBooleanValue("gui", "screenshotsfilename"));

    Group screenshotsColumn = new Group(composite1, SWT.NONE);
    screenshotsColumn.setLayout(new GridLayout(3, false));
    GridData screenshotsCData = new GridData();
    screenshotsCData.grabExcessHorizontalSpace = true;
    screenshotsCData.horizontalAlignment = GridData.FILL;
    screenshotsCData.horizontalSpan = 2;
    screenshotsColumn.setLayoutData(screenshotsCData);
    screenshotsColumn.setText(settings.msg("dialog.settings.screenshotscolumn"));
    Label columnHeightLabel = new Label(screenshotsColumn, SWT.NONE);
    columnHeightLabel.setText(settings.msg("dialog.settings.height"));
    screenshotsColumnHeight = new Scale(screenshotsColumn, SWT.NONE);
    screenshotsColumnHeight.setMaximum(200);
    screenshotsColumnHeight.setMinimum(16);
    GridData sshotsColumnHeightData = new GridData();
    sshotsColumnHeightData.grabExcessHorizontalSpace = true;
    sshotsColumnHeightData.horizontalAlignment = GridData.FILL;
    screenshotsColumnHeight.setLayoutData(sshotsColumnHeightData);
    screenshotsColumnHeight.setIncrement(4);
    screenshotsColumnHeight.setPageIncrement(16);
    screenshotsColumnHeight.setSelection(conf.getIntValue("gui", "screenshotscolumnheight"));
    screenshotsColumnHeight.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent evt) {
            columnHeightValue
                    .setText(screenshotsColumnHeight.getSelection() + settings.msg("dialog.settings.px"));
            columnHeightValue.pack();
        }
    });
    columnHeightValue = new Label(screenshotsColumn, SWT.NONE);
    columnHeightValue.setText(screenshotsColumnHeight.getSelection() + settings.msg("dialog.settings.px"));

    final Label stretchLabel = new Label(screenshotsColumn, SWT.NONE);
    stretchLabel.setText(settings.msg("dialog.settings.screenshotscolumnstretch"));
    final Button stretch = new Button(screenshotsColumn, SWT.CHECK);
    stretch.setSelection(conf.getBooleanValue("gui", "screenshotscolumnstretch"));
    new Label(screenshotsColumn, SWT.NONE);
    final Label keepAspectRatioLabel = new Label(screenshotsColumn, SWT.NONE);
    keepAspectRatioLabel.setText(settings.msg("dialog.settings.screenshotscolumnkeepaspectratio"));
    final Button keepAspectRatio = new Button(screenshotsColumn, SWT.CHECK);
    keepAspectRatio.setSelection(conf.getBooleanValue("gui", "screenshotscolumnkeepaspectratio"));
    new Label(screenshotsColumn, SWT.NONE);
    keepAspectRatio.setEnabled(stretch.getSelection());
    stretch.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            keepAspectRatio.setEnabled(stretch.getSelection());
        }
    });

    Group buttonsGroup = new Group(composite1, SWT.NONE);
    buttonsGroup.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
    buttonsGroup.setLayout(new GridLayout(2, false));
    buttonsGroup.setText(settings.msg("dialog.settings.buttons"));

    final Label buttonLabel = new Label(buttonsGroup, SWT.NONE);
    buttonLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    buttonLabel.setText(settings.msg("dialog.settings.display"));

    buttonDisplay = new Combo(buttonsGroup, SWT.READ_ONLY);
    buttonDisplay.setItems(buttonDisplayOptions);
    buttonDisplay.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    buttonDisplay.select(conf.getIntValue("gui", "buttondisplay"));

    final Group notesGroup = new Group(composite1, SWT.NONE);
    notesGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    notesGroup.setLayout(new GridLayout(2, false));
    notesGroup.setText(settings.msg("dialog.profile.notes"));

    final Label fontLabel = new Label(notesGroup, SWT.NONE);
    fontLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    fontLabel.setText(settings.msg("dialog.settings.font"));

    final Button fontButton = new Button(notesGroup, SWT.PUSH);
    fontButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    Font f = GeneralPurposeGUI.stringToFont(shell.getDisplay(), port.getFont(),
            conf.getValues("gui", "notesfont"));
    fontButton.setText(f.getFontData()[0].getName());
    fontButton.setFont(f);
    fontButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            FontDialog fd = new FontDialog(shell, SWT.NONE);
            fd.setFontList(fontButton.getFont().getFontData());
            FontData newFont = fd.open();
            if (newFont != null) {
                fontButton.setText(newFont.getName());
                fontButton.setFont(new Font(shell.getDisplay(), newFont));
                notesGroup.setSize(notesGroup.computeSize(SWT.DEFAULT, SWT.DEFAULT));
                composite1.layout();
            }
        }
    });

    final TabItem enginesTabItem = new TabItem(tabFolder, SWT.NONE);
    enginesTabItem.setText(settings.msg("dialog.settings.tab.engines"));
    Composite compositeHoldingSubTabs = new Composite(tabFolder, SWT.NONE);
    compositeHoldingSubTabs.setLayout(new FillLayout());
    enginesTabItem.setControl(compositeHoldingSubTabs);
    final TabFolder enginesTabFolder = new TabFolder(compositeHoldingSubTabs, SWT.NONE);

    setTitle = new Button[NR_OF_ENGINES];
    setDev = new Button[NR_OF_ENGINES];
    setPub = new Button[NR_OF_ENGINES];
    setYear = new Button[NR_OF_ENGINES];
    setGenre = new Button[NR_OF_ENGINES];
    setLink = new Button[NR_OF_ENGINES];
    setRank = new Button[NR_OF_ENGINES];
    setDescr = new Button[NR_OF_ENGINES];
    allRegionsCoverArt = new Button[NR_OF_ENGINES];
    chooseCoverArt = new Button[NR_OF_ENGINES];
    chooseScreenshot = new Button[NR_OF_ENGINES];
    maxCoverArt = new Spinner[NR_OF_ENGINES];
    maxScreenshots = new Spinner[NR_OF_ENGINES];
    platformFilterValues = new Text[NR_OF_ENGINES];

    for (int i = 0; i < NR_OF_ENGINES; i++) {
        WebSearchEngine engine = EditProfileDialog.webSearchEngines.get(i);
        final TabItem engineTabItem = new TabItem(enginesTabFolder, SWT.NONE);
        engineTabItem.setText(settings.msg("dialog.settings.tab." + engine.getSimpleName()));
        Composite composite3 = new Composite(enginesTabFolder, SWT.NONE);
        composite3.setLayout(new GridLayout(1, true));
        engineTabItem.setControl(composite3);
        Group consult = new Group(composite3, SWT.NONE);
        consult.setLayout(new GridLayout(2, false));
        GridData consultLData = new GridData();
        consultLData.grabExcessHorizontalSpace = true;
        consultLData.horizontalAlignment = GridData.FILL;
        consultLData.grabExcessVerticalSpace = true;
        consultLData.verticalAlignment = GridData.FILL;
        consult.setLayoutData(consultLData);
        consult.setText(settings.msg("dialog.settings.consult", new String[] { engine.getName() }));
        Label titleLabel = new Label(consult, SWT.NONE);
        titleLabel.setText(settings.msg("dialog.settings.settitle"));
        setTitle[i] = new Button(consult, SWT.CHECK);
        setTitle[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_title"));
        Label devLabel = new Label(consult, SWT.NONE);
        devLabel.setText(settings.msg("dialog.settings.setdeveloper"));
        setDev[i] = new Button(consult, SWT.CHECK);
        setDev[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_developer"));
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("hotud")
                || engine.getSimpleName().equals("thegamesdb")) {
            Label pubLabel = new Label(consult, SWT.NONE);
            pubLabel.setText(settings.msg("dialog.settings.setpublisher"));
            setPub[i] = new Button(consult, SWT.CHECK);
            setPub[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_publisher"));
        }
        Label yearLabel = new Label(consult, SWT.NONE);
        yearLabel.setText(settings.msg("dialog.settings.setyear"));
        setYear[i] = new Button(consult, SWT.CHECK);
        setYear[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_year"));
        Label genreLabel = new Label(consult, SWT.NONE);
        genreLabel.setText(settings.msg("dialog.settings.setgenre"));
        setGenre[i] = new Button(consult, SWT.CHECK);
        setGenre[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_genre"));
        Label linkLabel = new Label(consult, SWT.NONE);
        linkLabel.setText(settings.msg("dialog.settings.setlink", new String[] { engine.getName() }));
        setLink[i] = new Button(consult, SWT.CHECK);
        setLink[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_link"));
        Label rankLabel = new Label(consult, SWT.NONE);
        rankLabel.setText(settings.msg("dialog.settings.setrank",
                new Object[] { MainWindow.columnNames[Constants.RO_COLUMN_NAMES + 8] }));
        setRank[i] = new Button(consult, SWT.CHECK);
        setRank[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_rank"));
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("hotud")
                || engine.getSimpleName().equals("thegamesdb")) {
            Label descrLabel = new Label(consult, SWT.NONE);
            descrLabel.setText(settings.msg("dialog.settings.setdescription"));
            setDescr[i] = new Button(consult, SWT.CHECK);
            setDescr[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "set_description"));
        }
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("thegamesdb")) {
            Label chooseCoverArtLabel = new Label(consult, SWT.NONE);
            chooseCoverArtLabel.setText(settings.msg("dialog.settings.choosecoverart"));
            Composite comp = new Composite(consult, SWT.NONE);
            GridLayout layout = new GridLayout(3, false);
            layout.marginWidth = 0;
            comp.setLayout(layout);
            chooseCoverArt[i] = new Button(comp, SWT.CHECK);
            chooseCoverArt[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "choose_coverart"));

            if (engine.getSimpleName().equals("mobygames")) {
                Label allRegionsCoverArtLabel = new Label(comp, SWT.NONE);
                allRegionsCoverArtLabel.setText(settings.msg("dialog.settings.allregionscoverart"));
                GridData gd = new GridData();
                gd.horizontalIndent = 40;
                allRegionsCoverArtLabel.setLayoutData(gd);

                allRegionsCoverArt[i] = new Button(comp, SWT.CHECK);
                allRegionsCoverArt[i].setSelection(
                        conf.getBooleanValue(engine.getSimpleName(), "force_all_regions_coverart"));
            }
        }
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("pouet")
                || engine.getSimpleName().equals("thegamesdb")) {
            Label chooseScreenshotLabel = new Label(consult, SWT.NONE);
            chooseScreenshotLabel.setText(settings.msg("dialog.settings.choosescreenshot"));
            chooseScreenshot[i] = new Button(consult, SWT.CHECK);
            chooseScreenshot[i].setSelection(conf.getBooleanValue(engine.getSimpleName(), "choose_screenshot"));
        }
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("thegamesdb")) {
            final Label maxCoverArtLabel = new Label(consult, SWT.NONE);
            maxCoverArtLabel.setText(settings.msg("dialog.settings.multieditmaxcoverart"));
            maxCoverArt[i] = new Spinner(consult, SWT.BORDER);
            maxCoverArt[i].setLayoutData(new GridData(100, SWT.DEFAULT));
            maxCoverArt[i].setMinimum(0);
            maxCoverArt[i].setMaximum(Integer.MAX_VALUE);
            maxCoverArt[i].setSelection(conf.getIntValue(engine.getSimpleName(), "multi_max_coverart"));
        }
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("pouet")
                || engine.getSimpleName().equals("thegamesdb")) {
            final Label maxScreenshotsLabel = new Label(consult, SWT.NONE);
            maxScreenshotsLabel.setText(settings.msg("dialog.settings.multieditmaxscreenshot"));
            maxScreenshots[i] = new Spinner(consult, SWT.BORDER);
            maxScreenshots[i].setLayoutData(new GridData(100, SWT.DEFAULT));
            maxScreenshots[i].setMinimum(0);
            maxScreenshots[i].setMaximum(Integer.MAX_VALUE);
            maxScreenshots[i].setSelection(conf.getIntValue(engine.getSimpleName(), "multi_max_screenshot"));
        }
        Label filterLabel = new Label(consult, SWT.NONE);
        filterLabel.setText(settings.msg("dialog.settings.platformfilter"));
        if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("pouet")) {
            platformFilterValues[i] = new Text(consult, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
            platformFilterValues[i].setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
            platformFilterValues[i].setText(conf.getMultilineValues(engine.getSimpleName(), "platform_filter",
                    platformFilterValues[i].getLineDelimiter()));
        } else {
            platformFilterValues[i] = new Text(consult, SWT.BORDER);
            platformFilterValues[i].setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
            platformFilterValues[i].setText(conf.getValue(engine.getSimpleName(), "platform_filter"));
        }
    }

    final TabItem envTabItem = new TabItem(tabFolder, SWT.NONE);
    envTabItem.setText(settings.msg("dialog.settings.tab.environment"));
    Composite composite4 = new Composite(tabFolder, SWT.NONE);
    composite4.setLayout(new GridLayout(1, true));
    envTabItem.setControl(composite4);
    Group envGroup = new Group(composite4, SWT.NONE);
    envGroup.setLayout(new GridLayout(2, false));
    GridData envLData = new GridData();
    envLData.grabExcessHorizontalSpace = true;
    envLData.horizontalAlignment = GridData.FILL;
    envLData.grabExcessVerticalSpace = true;
    envLData.verticalAlignment = GridData.FILL;
    envGroup.setLayoutData(envLData);
    envGroup.setText(settings.msg("dialog.settings.environment"));
    Label enableEnvLabel = new Label(envGroup, SWT.NONE);
    enableEnvLabel.setText(settings.msg("dialog.settings.enableenvironment"));
    final Button enableEnv = new Button(envGroup, SWT.CHECK);
    enableEnv.setSelection(conf.getBooleanValue("environment", "use"));
    enableEnv.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            envValues.setEnabled(enableEnv.getSelection());
        }
    });
    Label envLabel = new Label(envGroup, SWT.NONE);
    envLabel.setText(settings.msg("dialog.settings.environmentvariables"));
    envValues = new Text(envGroup, SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL);
    envValues.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    envValues.setText(conf.getMultilineValues("environment", "value", envValues.getLineDelimiter()));
    envValues.setEnabled(enableEnv.getSelection());

    final Composite composite_7 = new Composite(shell, SWT.NONE);
    composite_7.setLayout(new GridLayout(2, true));
    composite_7.setLayoutData(BorderLayout.SOUTH);

    final Button okButton = new Button(composite_7, SWT.NONE);
    okButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            if (!isValid()) {
                return;
            }

            changedVisColumns = haveColumnsBeenChanged();
            if (changedVisColumns)
                updateColumnSettings();

            conf.setBooleanValue("dosbox", "hideconsole", console.getSelection());
            conf.setBooleanValue("communication", "port_enabled", portEnabled.getSelection());
            conf.setValue("communication", "port", port.getText());
            conf.setIntValue("profiledefaults", "confpath", confLocation.getSelectionIndex());
            conf.setIntValue("profiledefaults", "conffile", confFilename.getSelectionIndex());
            conf.setValue("locale", "language", locales.get(localeCombo.getText()).getLanguage());
            conf.setValue("locale", "country", locales.get(localeCombo.getText()).getCountry());
            conf.setValue("locale", "variant", locales.get(localeCombo.getText()).getVariant());
            for (int i = 0; i < MainWindow.columnNames.length; i++) {
                conf.setBooleanValue("gui", "column" + (i + 1) + "visible",
                        visibleColumns[allColumnIDs.indexOf(i)].getChecked());
            }
            conf.setBooleanValue("gui", "autosortonupdate", autosort.getSelection());
            for (int i = 0; i < Constants.EDIT_COLUMN_NAMES; i++) {
                conf.setValue("gui", "custom" + (i + 1),
                        visibleColumns[allColumnIDs.indexOf(i + Constants.RO_COLUMN_NAMES)].getText());
            }
            conf.setIntValue("gui", "screenshotsheight", screenshotsHeight.getSelection());
            conf.setBooleanValue("gui", "screenshotsfilename", displayFilename.getSelection());
            conf.setIntValue("gui", "screenshotscolumnheight", screenshotsColumnHeight.getSelection());
            conf.setBooleanValue("gui", "screenshotscolumnstretch", stretch.getSelection());
            conf.setBooleanValue("gui", "screenshotscolumnkeepaspectratio", keepAspectRatio.getSelection());

            Rectangle rec = shell.getBounds();
            conf.setIntValue("gui", "settingsdialog_width", rec.width);
            conf.setIntValue("gui", "settingsdialog_height", rec.height);
            conf.setIntValue("gui", "buttondisplay", buttonDisplay.getSelectionIndex());
            conf.setMultilineValues("gui", "notesfont",
                    GeneralPurposeGUI.fontToString(shell.getDisplay(), fontButton.getFont()), "|");

            for (int i = 0; i < NR_OF_ENGINES; i++) {
                WebSearchEngine engine = EditProfileDialog.webSearchEngines.get(i);
                conf.setBooleanValue(engine.getSimpleName(), "set_title", setTitle[i].getSelection());
                conf.setBooleanValue(engine.getSimpleName(), "set_developer", setDev[i].getSelection());
                if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("hotud")
                        || engine.getSimpleName().equals("thegamesdb")) {
                    conf.setBooleanValue(engine.getSimpleName(), "set_publisher", setPub[i].getSelection());
                    conf.setBooleanValue(engine.getSimpleName(), "set_description", setDescr[i].getSelection());
                }
                conf.setBooleanValue(engine.getSimpleName(), "set_year", setYear[i].getSelection());
                conf.setBooleanValue(engine.getSimpleName(), "set_genre", setGenre[i].getSelection());
                conf.setBooleanValue(engine.getSimpleName(), "set_link", setLink[i].getSelection());
                conf.setBooleanValue(engine.getSimpleName(), "set_rank", setRank[i].getSelection());
                if (engine.getSimpleName().equals("mobygames")) {
                    conf.setBooleanValue(engine.getSimpleName(), "force_all_regions_coverart",
                            allRegionsCoverArt[i].getSelection());
                }
                if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("thegamesdb")) {
                    conf.setBooleanValue(engine.getSimpleName(), "choose_coverart",
                            chooseCoverArt[i].getSelection());
                    conf.setIntValue(engine.getSimpleName(), "multi_max_coverart",
                            maxCoverArt[i].getSelection());
                }
                if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("pouet")
                        || engine.getSimpleName().equals("thegamesdb")) {
                    conf.setBooleanValue(engine.getSimpleName(), "choose_screenshot",
                            chooseScreenshot[i].getSelection());
                    conf.setIntValue(engine.getSimpleName(), "multi_max_screenshot",
                            maxScreenshots[i].getSelection());
                }
                if (engine.getSimpleName().equals("mobygames") || engine.getSimpleName().equals("pouet")) {
                    conf.setMultilineValues(engine.getSimpleName(), "platform_filter",
                            platformFilterValues[i].getText(), platformFilterValues[i].getLineDelimiter());
                } else {
                    conf.setValue(engine.getSimpleName(), "platform_filter", platformFilterValues[i].getText());
                }
            }

            conf.setBooleanValue("environment", "use", enableEnv.getSelection());
            conf.setMultilineValues("environment", "value", envValues.getText(), envValues.getLineDelimiter());

            storeValues();
            settings.getSettings().injectValuesFrom(conf);
            shell.close();
        }

        private boolean haveColumnsBeenChanged() {
            for (int i = 0; i < MainWindow.columnNames.length; i++)
                if ((conf.getBooleanValue("gui",
                        "column" + (allColumnIDs.get(i) + 1) + "visible") != visibleColumns[i].getChecked())
                        || !MainWindow.columnNames[allColumnIDs.get(i)].equals(visibleColumns[i].getText()))
                    return true;
            return false;
        }
    });
    shell.setDefaultButton(okButton);
    okButton.setText(settings.msg("button.ok"));

    final Button cancelButton = new Button(composite_7, SWT.NONE);
    cancelButton.setText(settings.msg("button.cancel"));
    cancelButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(final SelectionEvent event) {
            shell.close();
        }
    });

    final GridData gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.widthHint = GeneralPurposeGUI.getWidth(okButton, cancelButton);
    okButton.setLayoutData(gridData);
    cancelButton.setLayoutData(gridData);
}

From source file:org.apache.accumulo.tserver.tablet.Tablet.java

public TreeMap<KeyExtent, TabletData> split(byte[] sp) throws IOException {

    if (sp != null && extent.getEndRow() != null && extent.getEndRow().equals(new Text(sp))) {
        throw new IllegalArgumentException();
    }//ww w. j av  a 2 s .  c om

    if (sp != null && sp.length > tableConfiguration.getMemoryInBytes(Property.TABLE_MAX_END_ROW_SIZE)) {
        String msg = "Cannot split tablet " + extent + ", selected split point too long.  Length :  "
                + sp.length;
        log.warn(msg);
        throw new IOException(msg);
    }

    if (extent.isRootTablet()) {
        String msg = "Cannot split root tablet";
        log.warn(msg);
        throw new RuntimeException(msg);
    }

    try {
        initiateClose(true, false, false);
    } catch (IllegalStateException ise) {
        log.debug("File " + extent + " not splitting : " + ise.getMessage());
        return null;
    }

    // obtain this info outside of synch block since it will involve opening
    // the map files... it is ok if the set of map files changes, because
    // this info is used for optimization... it is ok if map files are missing
    // from the set... can still query and insert into the tablet while this
    // map file operation is happening
    Map<FileRef, FileUtil.FileInfo> firstAndLastRows = FileUtil.tryToGetFirstAndLastRows(
            getTabletServer().getFileSystem(), getTabletServer().getConfiguration(),
            getDatafileManager().getFiles());

    synchronized (this) {
        // java needs tuples ...
        TreeMap<KeyExtent, TabletData> newTablets = new TreeMap<KeyExtent, TabletData>();

        long t1 = System.currentTimeMillis();
        // choose a split point
        SplitRowSpec splitPoint;
        if (sp == null)
            splitPoint = findSplitRow(getDatafileManager().getFiles());
        else {
            Text tsp = new Text(sp);
            splitPoint = new SplitRowSpec(FileUtil.estimatePercentageLTE(getTabletServer().getFileSystem(),
                    getTabletServer().getConfiguration(), extent.getPrevEndRow(), extent.getEndRow(),
                    FileUtil.toPathStrings(getDatafileManager().getFiles()), tsp), tsp);
        }

        if (splitPoint == null || splitPoint.row == null) {
            log.info("had to abort split because splitRow was null");
            closeState = CloseState.OPEN;
            return null;
        }

        closeState = CloseState.CLOSING;
        completeClose(true, false);

        Text midRow = splitPoint.row;
        double splitRatio = splitPoint.splitRatio;

        KeyExtent low = new KeyExtent(extent.getTableId(), midRow, extent.getPrevEndRow());
        KeyExtent high = new KeyExtent(extent.getTableId(), extent.getEndRow(), midRow);

        String lowDirectory = createTabletDirectory(getTabletServer().getFileSystem(), extent.getTableId(),
                midRow);

        // write new tablet information to MetadataTable
        SortedMap<FileRef, DataFileValue> lowDatafileSizes = new TreeMap<FileRef, DataFileValue>();
        SortedMap<FileRef, DataFileValue> highDatafileSizes = new TreeMap<FileRef, DataFileValue>();
        List<FileRef> highDatafilesToRemove = new ArrayList<FileRef>();

        MetadataTableUtil.splitDatafiles(extent.getTableId(), midRow, splitRatio, firstAndLastRows,
                getDatafileManager().getDatafileSizes(), lowDatafileSizes, highDatafileSizes,
                highDatafilesToRemove);

        log.debug("Files for low split " + low + "  " + lowDatafileSizes.keySet());
        log.debug("Files for high split " + high + "  " + highDatafileSizes.keySet());

        String time = tabletTime.getMetadataValue();

        MetadataTableUtil.splitTablet(high, extent.getPrevEndRow(), splitRatio, getTabletServer(),
                getTabletServer().getLock());
        MasterMetadataUtil.addNewTablet(getTabletServer(), low, lowDirectory,
                getTabletServer().getTabletSession(), lowDatafileSizes, getBulkIngestedFiles(), time,
                lastFlushID, lastCompactID, getTabletServer().getLock());
        MetadataTableUtil.finishSplit(high, highDatafileSizes, highDatafilesToRemove, getTabletServer(),
                getTabletServer().getLock());

        log.log(TLevel.TABLET_HIST, extent + " split " + low + " " + high);

        newTablets.put(high, new TabletData(tabletDirectory, highDatafileSizes, time, lastFlushID,
                lastCompactID, lastLocation, getBulkIngestedFiles()));
        newTablets.put(low, new TabletData(lowDirectory, lowDatafileSizes, time, lastFlushID, lastCompactID,
                lastLocation, getBulkIngestedFiles()));

        long t2 = System.currentTimeMillis();

        log.debug(String.format("offline split time : %6.2f secs", (t2 - t1) / 1000.0));

        closeState = CloseState.COMPLETE;
        return newTablets;
    }
}

From source file:net.shipilev.fjptrace.tasks.PrintSummaryTask.java

@Override
public void doWork() throws Exception {
    // walk the trees

    PrintWriter pw = new PrintWriter(fileName);

    LayerStatistics global = new LayerStatistics();
    SortedMap<Integer, LayerStatistics> layerStats = new TreeMap<>();

    for (Task t : subgraphs.getParents()) {

        // compute transitive closure

        Set<Task> visited = new HashSet<>();
        Set<Long> workers = new HashSet<>();
        List<Task> prev = new ArrayList<>();
        List<Task> cur = new ArrayList<>();

        int depth = 0;

        cur.add(t);/*from  ww  w. jav a2 s  .  c om*/
        while (visited.addAll(cur)) {
            prev.clear();
            prev.addAll(cur);
            cur.clear();

            Set<Long> layerWorkers = new HashSet<>();

            LayerStatistics layerStat = layerStats.get(depth);
            if (layerStat == null) {
                layerStat = new LayerStatistics();
                layerStats.put(depth, layerStat);
            }

            for (Task c : prev) {
                Collection<Task> children = c.getChildren();
                if (!children.isEmpty()) {
                    cur.addAll(children);
                }
                layerStat.arities.addValue(children.size());
                layerStat.selfTime.addValue(c.getSelfTime() / 1_000_000.0);
                layerStat.totalTime.addValue(c.getTotalTime() / 1_000_000.0);

                global.selfTime.addValue(c.getSelfTime() / 1_000_000.0);
                global.totalTime.addValue(c.getTotalTime() / 1_000_000.0);
                global.arities.addValue(children.size());

                layerWorkers.add(c.getWorker());
            }

            layerStat.counts.addValue(prev.size());
            layerStat.threads.addValue(layerWorkers.size());
            workers.addAll(layerWorkers);

            depth++;
        }

        global.depths.addValue(depth);
        global.counts.addValue(visited.size());
        global.threads.addValue(workers.size());
    }

    pw.println("Summary statistics:");
    pw.printf("  total external tasks = %.0f\n", layerStats.get(0).counts.getSum());
    pw.printf("  total subtasks = %.0f\n", global.counts.getSum());
    pw.printf("  total threads = %.0f\n", global.threads.getMean());

    pw.println();

    pw.println("Per task statistics:");
    pw.printf("  tasks:   sum = %10.0f, min = %5.2f, avg = %5.2f, max = %5.2f\n", global.counts.getSum(),
            global.counts.getMin(), global.counts.getMean(), global.counts.getMax());
    pw.printf("  depth:                     min = %5.2f, avg = %5.2f, max = %5.2f\n", global.depths.getMin(),
            global.depths.getMean(), global.depths.getMax());
    pw.printf("  arity:                     min = %5.2f, avg = %5.2f, max = %5.2f\n", global.arities.getMin(),
            global.arities.getMean(), global.arities.getMax());
    pw.printf("  threads:                   min = %5.2f, avg = %5.2f, max = %5.2f\n", global.threads.getMin(),
            global.threads.getMean(), global.threads.getMax());

    pw.println();
    pw.println("Per task + per depth statistics:");
    for (Integer depth : layerStats.keySet()) {
        LayerStatistics s = layerStats.get(depth);
        pw.printf("  Depth = %d: \n", depth);
        pw.printf("    tasks:           sum = %10.0f, min = %5.2f, avg = %5.2f, max = %5.2f\n",
                s.counts.getSum(), s.counts.getMin(), s.counts.getMean(), s.counts.getMax());
        pw.printf("    self time (ms):  sum = %10.0f, min = %5.2f, avg = %5.2f, max = %5.2f\n",
                s.selfTime.getSum(), s.selfTime.getMin(), s.selfTime.getMean(), s.selfTime.getMax());
        pw.printf("    total time (ms): sum = %10.0f, min = %5.2f, avg = %5.2f, max = %5.2f\n",
                s.totalTime.getSum(), s.totalTime.getMin(), s.totalTime.getMean(), s.totalTime.getMax());
        pw.printf("    arity:                             min = %5.2f, avg = %5.2f, max = %5.2f\n",
                s.arities.getMin(), s.arities.getMean(), s.arities.getMax());
        pw.printf("    threads:                           min = %5.2f, avg = %5.2f, max = %5.2f\n",
                s.threads.getMin(), s.threads.getMean(), s.threads.getMax());
    }

    summarizeEvents(pw, events);

    pw.flush();
    pw.close();
}

From source file:com.google.gwt.emultest.java.util.TreeMapTest.java

public void testHeadMapLjava_lang_Object() {
    K[] keys = getSortedKeys();//from w  w  w .j  a va2s  . c om
    V[] values = getSortedValues();
    NavigableMap<K, V> map = createNavigableMap();
    for (int i = 0; i < keys.length; i++) {
        map.put(keys[i], values[i]);
    }

    Map<K, V> head = map.headMap(keys[3]);
    assertEquals(3, head.size());
    assertTrue(head.containsKey(keys[0]));
    assertTrue(head.containsValue(values[1]));
    assertTrue(head.containsKey(keys[2]));

    if (useNullKey() && useNullValue()) {
        map.put(null, null);

        SortedMap<K, V> submap = map.headMap(null);
        assertEquals(0, submap.size());

        Set<K> keySet = submap.keySet();
        assertEquals(0, keySet.size());

        Set<Map.Entry<K, V>> entrySet = submap.entrySet();
        assertEquals(0, entrySet.size());

        Collection<V> valueCollection = submap.values();
        assertEquals(0, valueCollection.size());

        map.remove(null);
    }

    SortedMap<K, V> submap = map.headMap(getLessThanMinimumKey());
    assertEquals(submap.size(), 0);
    assertTrue(submap.isEmpty());
    try {
        submap.firstKey();
        fail("NoSuchElementException should be thrown");
    } catch (NoSuchElementException expected) {
    }

    try {
        submap.lastKey();
        fail("NoSuchElementException should be thrown");
    } catch (NoSuchElementException expected) {
    }

    try {
        submap.headMap(null);
        assertTrue("expected exception", useNullKey());
    } catch (NullPointerException e) {
        assertFalse("unexpected NPE", useNullKey());
    }
}

From source file:edu.cmu.tetrad.search.Lofs2.java

private void ruleR1(Graph skeleton, Graph graph, List<Node> nodes) {
    List<DataSet> centeredData = DataUtils.center(this.dataSets);
    setDataSets(centeredData);//from   w w w.ja va 2  s.c om

    for (Node node : nodes) {
        SortedMap<Double, String> scoreReports = new TreeMap<Double, String>();

        List<Node> adj = new ArrayList<Node>();

        for (Node _node : skeleton.getAdjacentNodes(node)) {
            if (knowledge.isForbidden(_node.getName(), node.getName())) {
                continue;
            }

            adj.add(_node);
        }

        DepthChoiceGenerator gen = new DepthChoiceGenerator(adj.size(), adj.size());
        int[] choice;
        double maxScore = Double.NEGATIVE_INFINITY;
        List<Node> parents = null;

        while ((choice = gen.next()) != null) {
            List<Node> _parents = GraphUtils.asList(choice, adj);

            double score = score(node, _parents);
            scoreReports.put(-score, _parents.toString());

            if (score > maxScore) {
                maxScore = score;
                parents = _parents;
            }
        }

        double p = pValue(node, parents);

        if (p > alpha) {
            continue;
        }

        for (double score : scoreReports.keySet()) {
            TetradLogger.getInstance().log("score",
                    "For " + node + " parents = " + scoreReports.get(score) + " score = " + -score);
        }

        TetradLogger.getInstance().log("score", "");

        if (parents == null) {
            continue;
        }

        for (Node _node : adj) {
            if (parents.contains(_node)) {
                Edge parentEdge = Edges.directedEdge(_node, node);

                if (!graph.containsEdge(parentEdge)) {
                    graph.addEdge(parentEdge);
                }
            }
        }
    }

    for (Edge edge : skeleton.getEdges()) {
        if (!graph.isAdjacentTo(edge.getNode1(), edge.getNode2())) {
            graph.addUndirectedEdge(edge.getNode1(), edge.getNode2());
        }
    }
}