blob: b42eb468d62d82e99971131ad77e6c3bfc98b855 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2009, 2021 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.nico.core.util;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.statet.nico.core.runtime.SubmitType;
public class TrackingConfiguration2LaunchConfiguration {
public static final String LABEL_KEY = "label"; //$NON-NLS-1$
public static final String TRACK_STREAM_INFO = "TrackInfo.enable"; //$NON-NLS-1$
public static final String TRACK_STREAM_INPUT = "TrackInput.enable"; //$NON-NLS-1$
public static final String TRACK_STREAM_INPUT_HISTORYONLY = "TrackInput.HistoryOnly.enable"; //$NON-NLS-1$
public static final String TRACK_STREAM_OUTPUT = "TrackOutput.enable"; //$NON-NLS-1$
public static final String TRACK_STREAM_OUTPUT_TRUNCATE = "TrackOutput.Truncate.enable"; //$NON-NLS-1$
public static final String TRACK_STREAM_OUTPUT_TRUNCATE_LINES = "TrackOutput.Truncate.lines"; //$NON-NLS-1$
public static final String SUBMIT_TYPES = "SubmitTypes.ids"; //$NON-NLS-1$
public static final String FILE_PATH = "File.path"; //$NON-NLS-1$
public static final String FILE_MODE = "File.mode"; //$NON-NLS-1$
public static final String PREPEND_TIMESTAMP = "Prepend.Timestamp.enable"; //$NON-NLS-1$
public static final String LOAD_HISTORY = "History.LoadAtStartup.enable"; //$NON-NLS-1$
public void load(final TrackingConfiguration trackingConfig, final ILaunchConfiguration launchConfig) throws CoreException {
final String id = trackingConfig.getId();
trackingConfig.setName(launchConfig.getAttribute(id+'.'+LABEL_KEY, "")); //$NON-NLS-1$
trackingConfig.setTrackStreamInfo(launchConfig.getAttribute(id+'.'+TRACK_STREAM_INFO, false));
trackingConfig.setTrackStreamInput(launchConfig.getAttribute(id+'.'+TRACK_STREAM_INPUT, false));
trackingConfig.setTrackStreamInputHistoryOnly(launchConfig.getAttribute(id+'.'+TRACK_STREAM_INPUT_HISTORYONLY, false));
trackingConfig.setTrackStreamOutput(launchConfig.getAttribute(id+'.'+TRACK_STREAM_OUTPUT, false));
trackingConfig.setTrackStreamOutputTruncate(launchConfig.getAttribute(id+'.'+TRACK_STREAM_OUTPUT_TRUNCATE, false));
trackingConfig.setTrackStreamOutputTruncateLines(launchConfig.getAttribute(id+'.'+TRACK_STREAM_OUTPUT_TRUNCATE_LINES, 1000000));
final List<String> submitTypeNames = launchConfig.getAttribute(id+'.'+SUBMIT_TYPES, (List<String>) null);
if (submitTypeNames != null) {
final EnumSet<SubmitType> submitTypes = EnumSet.noneOf(SubmitType.class);
for (final String name : submitTypeNames) {
submitTypes.add(SubmitType.valueOf(name));
}
trackingConfig.setSubmitTypes(submitTypes);
}
else {
trackingConfig.setSubmitTypes(SubmitType.getDefaultSet());
}
trackingConfig.setFilePath(launchConfig.getAttribute(id+'.'+FILE_PATH, "")); //$NON-NLS-1$
trackingConfig.setFileMode(launchConfig.getAttribute(id+'.'+FILE_MODE, TrackingConfiguration.DEFAULT_FILE_MODE));
trackingConfig.setPrependTimestamp(launchConfig.getAttribute(id+'.'+PREPEND_TIMESTAMP, false));
if (id.equals(HistoryTrackingConfiguration.HISTORY_TRACKING_ID)
&& launchConfig instanceof HistoryTrackingConfiguration) {
((HistoryTrackingConfiguration) launchConfig).setLoadHistory(launchConfig.getAttribute(id+'.'+LOAD_HISTORY, false));
}
}
public void save(final TrackingConfiguration trackingConfig, final ILaunchConfigurationWorkingCopy launchConfig) {
final String id = trackingConfig.getId();
launchConfig.setAttribute(id+'.'+LABEL_KEY, trackingConfig.getName());
launchConfig.setAttribute(id+'.'+TRACK_STREAM_INFO, trackingConfig.getTrackStreamInfo());
launchConfig.setAttribute(id+'.'+TRACK_STREAM_INPUT, trackingConfig.getTrackStreamInput());
launchConfig.setAttribute(id+'.'+TRACK_STREAM_INPUT_HISTORYONLY, trackingConfig.getTrackStreamInputHistoryOnly());
launchConfig.setAttribute(id+'.'+TRACK_STREAM_OUTPUT, trackingConfig.getTrackStreamOutput());
launchConfig.setAttribute(id+'.'+TRACK_STREAM_OUTPUT_TRUNCATE, trackingConfig.getTrackStreamOutputTruncate());
launchConfig.setAttribute(id+'.'+TRACK_STREAM_OUTPUT_TRUNCATE_LINES, trackingConfig.getTrackStreamOutputTruncateLines());
final EnumSet<SubmitType> submitTypes = trackingConfig.getSubmitTypes();
final List<String> submitTypeNames= new ArrayList<>(submitTypes.size());
for (final SubmitType submitType : submitTypes) {
submitTypeNames.add(submitType.name());
}
launchConfig.setAttribute(id+'.'+SUBMIT_TYPES, submitTypeNames);
launchConfig.setAttribute(id+'.'+FILE_PATH, trackingConfig.getFilePath());
launchConfig.setAttribute(id+'.'+FILE_MODE, trackingConfig.getFileMode());
launchConfig.setAttribute(id+'.'+PREPEND_TIMESTAMP, trackingConfig.getPrependTimestamp());
if (id.equals(HistoryTrackingConfiguration.HISTORY_TRACKING_ID)
&& launchConfig instanceof HistoryTrackingConfiguration) {
launchConfig.setAttribute(id+'.'+LOAD_HISTORY, ((HistoryTrackingConfiguration) launchConfig).getLoadHistory());
}
}
}