package gov.nasa.jpl.mbee.mdk.options;
import com.nomagic.magicdraw.core.Application;
import com.nomagic.magicdraw.core.options.AbstractPropertyOptionsGroup;
import com.nomagic.magicdraw.properties.BooleanProperty;
import com.nomagic.magicdraw.properties.Property;
import com.nomagic.magicdraw.properties.PropertyResourceProvider;
import com.nomagic.magicdraw.properties.StringProperty;
import com.nomagic.magicdraw.ui.ImageMap16;
import gov.nasa.jpl.mbee.mdk.util.MDUtils;
import javax.swing.*;
import java.io.File;
public class MDKOptionsGroup extends AbstractPropertyOptionsGroup {
public static final String ID = "options.mdk";
public static final String GROUP = "GROUP";
public static final String LOG_JSON_ID = "LOG_JSON_ID",
PERSIST_CHANGELOG_ID = "PERSIST_CHANGELOG_ID",
ENABLE_CHANGE_LISTENER_ID = "ENABLE_CHANGE_LISTENER_ID",
ENABLE_COORDINATED_SYNC_ID = "ENABLE_COORDINATED_SYNC_ID",
CUSTOM_USER_SCRIPT_DIRECTORIES_ID = "CUSTOM_USER_SCRIPT_DIRECTORIES_ID",
SHOW_ADVANCED_OPTIONS_ID = "SHOW_ADVANCED_OPTIONS_ID";
public MDKOptionsGroup() {
super(ID);
}
public static MDKOptionsGroup getMDKOptions() {
return (MDKOptionsGroup) Application.getInstance().getEnvironmentOptions().getGroup(ID);
}
public boolean isLogJson() {
Property p = getProperty(LOG_JSON_ID);
return (Boolean) p.getValue();
}
public void setLogJson(boolean value) {
BooleanProperty property = new BooleanProperty(LOG_JSON_ID, value);
property.setResourceProvider(PROPERTY_RESOURCE_PROVIDER);
property.setGroup(GROUP);
addProperty(property, true);
}
public boolean isPersistChangelog() {
Property p = getProperty(PERSIST_CHANGELOG_ID);
return (Boolean) p.getValue();
}
public void setPersistChangelog(boolean value) {
BooleanProperty property = new BooleanProperty(PERSIST_CHANGELOG_ID, value);
property.setResourceProvider(PROPERTY_RESOURCE_PROVIDER);
property.setGroup(GROUP);
if (MDUtils.isDeveloperMode()) {
addProperty(property, true);
}
else {
addInvisibleProperty(property);
}
}
public boolean isChangeListenerEnabled() {
Property p = getProperty(ENABLE_CHANGE_LISTENER_ID);
return (Boolean) p.getValue();
}
public void setChangeListenerEnabled(boolean value) {
BooleanProperty property = new BooleanProperty(ENABLE_CHANGE_LISTENER_ID, value);
property.setResourceProvider(PROPERTY_RESOURCE_PROVIDER);
property.setGroup(GROUP);
if (MDUtils.isDeveloperMode()) {
addProperty(property, true);
}
else {
addInvisibleProperty(property);
}
}
public boolean isCoordinatedSyncEnabled() {
Property p = getProperty(ENABLE_COORDINATED_SYNC_ID);
return (Boolean) p.getValue();
}
public void setCoordinatedSyncEnabled(boolean value) {
BooleanProperty property = new BooleanProperty(ENABLE_COORDINATED_SYNC_ID, value);
property.setResourceProvider(PROPERTY_RESOURCE_PROVIDER);
property.setGroup(GROUP);
if (MDUtils.isDeveloperMode()) {
addProperty(property, true);
}
else {
addInvisibleProperty(property);
}
}
public boolean isMDKAdvancedOptions() {
Property p = getProperty(SHOW_ADVANCED_OPTIONS_ID);
return (Boolean) p.getValue();
}
public void setMDKAdvancedOptions(boolean value) {
BooleanProperty property = new BooleanProperty(SHOW_ADVANCED_OPTIONS_ID, value);
property.setResourceProvider(PROPERTY_RESOURCE_PROVIDER);
property.setGroup(GROUP);
addProperty(property, true);
}
public File[] getCustomUserScriptDirectories() {
Property p = getProperty(CUSTOM_USER_SCRIPT_DIRECTORIES_ID);
String val = p.getValueStringRepresentation();
if (val == null || val.isEmpty()) {
return null;
}
File[] dirs = new File[getNumberOfCustomUserScriptDirectories()];
for (int i = 0; i < getNumberOfCustomUserScriptDirectories(); i++) {
dirs[i] = new File(val.split(File.pathSeparator)[i]);
}
return dirs;
}
public int getNumberOfCustomUserScriptDirectories() {
Property p = getProperty(CUSTOM_USER_SCRIPT_DIRECTORIES_ID);
String val = p.getValueStringRepresentation();
if (val == null || val.isEmpty()) {
return 0;
}
return val.split(File.pathSeparator).length;
}
public void setUserScriptDirectory(String path) {
StringProperty property = new StringProperty(CUSTOM_USER_SCRIPT_DIRECTORIES_ID, path);
property.setResourceProvider(PROPERTY_RESOURCE_PROVIDER);
property.setGroup(GROUP);
addProperty(property, true);
}
public static final PropertyResourceProvider PROPERTY_RESOURCE_PROVIDER = (key, property) -> EnvironmentOptionsResources.getString(key);
@Override
public void setDefaultValues() {
setLogJson(MDUtils.isDeveloperMode());
setPersistChangelog(true);
setChangeListenerEnabled(true);
setCoordinatedSyncEnabled(true);
setMDKAdvancedOptions(MDUtils.isDeveloperMode());
setUserScriptDirectory("");
}
private static final String MDK_OPTIONS_NAME = "MDK_OPTIONS_NAME";
@Override
public String getName() {
return EnvironmentOptionsResources.getString(MDK_OPTIONS_NAME);
}
@Override
public Icon getGroupIcon() {
return ImageMap16.SETTINGS;
}
}