/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 3 as published by
the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.cirqwizard.settings;
import org.cirqwizard.fx.PCBSize;
import java.util.prefs.Preferences;
public class Settings
{
private static final String EXPORTED = "exported";
private static final String MACHINE_Y_DIFF_NAME = "v12.machine.y.diff";
private static final String MACHINE_REFERENCE_PIN_X = "v12.machine.reference.pin.x";
private static final String MACHINE_REFERENCE_PIN_Y = "v12.machine.reference.pin.y";
private static final String MACHINE_SMALL_PCB_WIDTH = "v12.machine.small.pcb.width";
private static final String MACHINE_LARGE_PCB_WIDTH = "v12.machine.large.pcb.width";
private static final String MACHINE_FAR_AWAY_Y = "v12.general.far.away.y";
private static final String SERIAL_PORT_NAME = "general.serial.port";
private static final String LOGGER_LOG_LEVEL = "general.log.level";
private static final String PROCESSING_THREADS = "general.processing_threads";
private static final String TRACES_TOOL_DIAMETER = "v12.defaults.traces.tool.diameter";
private static final String TRACES_FEED_XY = "v12.defaults.traces.feed.xy";
private static final String TRACES_FEED_ARC = "v12.defaults.traces.feed.arc";
private static final String TRACES_FEED_Z = "v12.defaults.traces.feed.z";
private static final String TRACES_SPEED = "defaults.traces.speed";
private static final String TRACES_CLEARANCE = "v12.defaults.traces.clearance";
private static final String TRACES_SAFETY_HEIGHT = "v12.defaults.traces.safety.height";
private static final String TRACES_DEFAULT_Z_OFFSET = "v12.defaults.traces.z.offset";
private static final String TRACES_WORKING_HEIGHT = "v12.defaults.traces.working.height";
private static final String TRACES_ADDITIONAL_PASSES = "traces.additional.passes";
private static final String TRACES_ADDITIONAL_PASSES_OVERLAP = "traces.additional.passes.overlap";
private static final String TRACES_ADDITONAL_PASSES_PADS_ONLY = "traces.additional.passes.pads.only";
private static final String DRILLING_FEED = "v12.defaults.drilling.feed";
private static final String DRILLING_SPEED = "v12.defaults.drilling.speed";
private static final String DRILLING_CLEARANCE = "v12.defaults.drilling.clearance";
private static final String DRILLING_SAFETY_HEIGHT = "v12.defaults.drilling.safety.height";
private static final String DRILLING_Z_OFFSET = "v12.defaults.drilling.z.offset";
private static final String DRILLING_WORKING_HEIGHT = "v12.defaults.drilling.working.height";
private static final String CONTOUR_FEED_XY = "v12.defaults.contour.feed.xy";
private static final String CONTOUR_FEED_ARC = "v12.defaults.contour.feed.arc";
private static final String CONTOUR_FEED_Z = "v12.defaults.contour.feed.z";
private static final String CONTOUR_SPEED = "defaults.contour.speed";
private static final String CONTOUR_CLEARANCE = "v12.defaults.contour.clearance";
private static final String CONTOUR_SAFETY_HEIGHT = "v12.defaults.contour.safety.height";
private static final String CONTOUR_Z_OFFSET = "v12.defaults.contour.z.offset";
private static final String CONTOUR_WORKING_HEIGHT = "v12.defaults.contour.working.height";
private static final String DISPENSING_NEEDLE_DIAMETER = "v12.defaults.dispensing.needle.diameter";
private static final String DISPENSING_PREFEED_PAUSE = "v12.defaults.dispensing.prefeed.pause";
private static final String DISPENSING_POSTFEED_PAUSE = "v12.defaults.dispensing.postfeed.pause";
private static final String DISPENSING_FEED = "v12.defaults.dispensing.feed";
private static final String DISPENSING_CLEARANCE = "v12.defaults.dispensing.clearance";
private static final String DISPENSING_Z_OFFSET = "v12.defaults.dispensing.z.offset";
private static final String DISPENSING_WORKING_HEIGHT = "v12.defaults.working.height";
private static final String DISPENSING_BLEEDING_DURATION = "dispensing.bleeding.duration";
private static final String PP_PICKUP_HEIGHT = "v12.pp.pickup.height";
private static final String PP_MOVE_HEIGHT = "v12.pp.move.height";
private static final String PP_ROTATION_FEED = "v12.pp.rotation.feed";
private static final String IMPORT_EXCELLON_INTEGER_PLACES = "import.excellon.integer.places";
private static final String IMPORT_EXCELLON_DECIMAL_PLACES = "import.excellon.decimal.places";
private static final String IMPORT_EXCELLON_UNIT_CONVERSION_RATIO = "import.excellon.unit.conversion.ratio";
private static final String IMPORT_PP_REGEX = "import.pp.regex";
private static final String INTERFACE_RECENT_FILES = "interface.recent.files";
private static final String INTERFACE_G54_X = "v12.interface.g54.x";
private static final String INTERFACE_G54_Y = "v12.interface.g54.y";
private static final String INTERFACE_PCB_SIZE = "interface.pcb.size";
private static final String INTERFACE_SCRAP_PLACE_X = "v12.interface.scrap.place.x";
private static final String INTERFACE_SCRAP_PLACE_Y = "v12.interface.scrap.place.y";
private static final String INTERFACE_TEST_CUT_DIRECTION = "interface.test.cut.direction";
private Preferences preferences;
public Settings(Preferences preferences)
{
this.preferences = preferences;
}
public void export()
{
if (preferences.get(LOGGER_LOG_LEVEL, null) == null)
return;
if (preferences.getBoolean(EXPORTED, false))
return;
MachineSettings machineSettings = SettingsFactory.getMachineSettings();
setInt(MACHINE_Y_DIFF_NAME, machineSettings.getYAxisDifference());
setInt(MACHINE_REFERENCE_PIN_X, machineSettings.getReferencePinX());
setInt(MACHINE_REFERENCE_PIN_Y, machineSettings.getReferencePinY());
setInt(MACHINE_SMALL_PCB_WIDTH, machineSettings.getSmallPcbWidth());
setInt(MACHINE_LARGE_PCB_WIDTH, machineSettings.getLargePcbWidth());
PredefinedLocationSettings predefinedLocationSettings = SettingsFactory.getPredefinedLocationSettings();
setInt(MACHINE_FAR_AWAY_Y, predefinedLocationSettings.getFarAwayY());
ApplicationSettings applicationSettings = SettingsFactory.getApplicationSettings();
setString(SERIAL_PORT_NAME, applicationSettings.getSerialPort());
setObject(LOGGER_LOG_LEVEL, applicationSettings.getLogLevel());
setInt(PROCESSING_THREADS, applicationSettings.getProcessingThreads());
InsulationMillingSettings insulationMillingSettings = SettingsFactory.getInsulationMillingSettings();
setInt(TRACES_CLEARANCE, insulationMillingSettings.getClearance());
setInt(TRACES_SAFETY_HEIGHT, insulationMillingSettings.getSafetyHeight());
setInt(TRACES_WORKING_HEIGHT, insulationMillingSettings.getWorkingHeight());
DrillingSettings drillingSettings = SettingsFactory.getDrillingSettings();
setInt(DRILLING_FEED, drillingSettings.getFeed());
setInt(DRILLING_SPEED, drillingSettings.getSpeed());
setInt(DRILLING_CLEARANCE, drillingSettings.getClearance());
setInt(DRILLING_SAFETY_HEIGHT, drillingSettings.getSafetyHeight());
setInt(DRILLING_Z_OFFSET, drillingSettings.getZOffset());
setInt(DRILLING_WORKING_HEIGHT, drillingSettings.getWorkingHeight());
ContourMillingSettings contourMillingSettings = SettingsFactory.getContourMillingSettings();
setInt(CONTOUR_FEED_XY, contourMillingSettings.getFeedXY());
setInt(CONTOUR_FEED_ARC, contourMillingSettings.getFeedArcs());
setInt(CONTOUR_FEED_Z, contourMillingSettings.getFeedZ());
setInt(CONTOUR_SPEED, contourMillingSettings.getSpeed());
setInt(CONTOUR_CLEARANCE, contourMillingSettings.getClearance());
setInt(CONTOUR_SAFETY_HEIGHT, contourMillingSettings.getSafetyHeight());
setInt(CONTOUR_Z_OFFSET, contourMillingSettings.getZOffset());
setInt(CONTOUR_WORKING_HEIGHT, contourMillingSettings.getWorkingHeight());
DispensingSettings dispensingSettings = new DispensingSettings();
setInt(DISPENSING_NEEDLE_DIAMETER, dispensingSettings.getNeedleDiameter());
setInt(DISPENSING_PREFEED_PAUSE, dispensingSettings.getPreFeedPause());
setInt(DISPENSING_POSTFEED_PAUSE, dispensingSettings.getPostFeedPause());
setInt(DISPENSING_FEED, dispensingSettings.getFeed());
setInt(DISPENSING_CLEARANCE, dispensingSettings.getClearance());
setInt(DISPENSING_Z_OFFSET, dispensingSettings.getZOffset());
setInt(DISPENSING_WORKING_HEIGHT, dispensingSettings.getWorkingHeight());
setInt(DISPENSING_BLEEDING_DURATION, dispensingSettings.getBleedingDuration());
PPSettings ppSettings = SettingsFactory.getPpSettings();
setInt(PP_PICKUP_HEIGHT, ppSettings.getPickupHeight());
setInt(PP_MOVE_HEIGHT, ppSettings.getMoveHeight());
setInt(PP_ROTATION_FEED, ppSettings.getRotationFeed());
ImportSettings importSettings = SettingsFactory.getImportSettings();
setInt(IMPORT_EXCELLON_INTEGER_PLACES, importSettings.getExcellonIntegerPlaces());
setInt(IMPORT_EXCELLON_DECIMAL_PLACES, importSettings.getExcellonDecimalPlaces());
if (preferences.get(IMPORT_EXCELLON_UNIT_CONVERSION_RATIO, null) != null)
importSettings.getExcellonUnits().setValue("1000".equals(preferences.get(IMPORT_EXCELLON_UNIT_CONVERSION_RATIO, null)) ? DistanceUnit.MM : DistanceUnit.INCHES);
ApplicationValues applicationValues = SettingsFactory.getApplicationValues();
setInt(INTERFACE_G54_X, applicationValues.getG54X());
setInt(INTERFACE_G54_Y, applicationValues.getG54Y());
applicationValues.getPcbSize().setValue(preferences.getInt(INTERFACE_PCB_SIZE, 0) == 0 ? PCBSize.Small : PCBSize.Large);
setInt(INTERFACE_SCRAP_PLACE_X, applicationValues.getScrapPlaceX());
setInt(INTERFACE_SCRAP_PLACE_Y, applicationValues.getScrapPlaceY());
applicationValues.getTestCutDirection().setValue(preferences.getInt(INTERFACE_TEST_CUT_DIRECTION, 0) == 0);
preferences.putBoolean(EXPORTED, true);
machineSettings.save();
applicationSettings.save();
insulationMillingSettings.save();
drillingSettings.save();
contourMillingSettings.save();
dispensingSettings.save();
ppSettings.save();
importSettings.save();
applicationValues.save();
}
private void setInt(String propertyName, UserPreference<Integer> preference)
{
String str = preferences.get(propertyName, null);
if (str != null)
preference.setValue(Integer.valueOf(str));
}
private void setString(String propertyName, UserPreference<String> preference)
{
String str = preferences.get(propertyName, null);
if (str != null)
preference.setValue(str);
}
private void setBoolean(String propertyName, UserPreference<Boolean> preference)
{
String str = preferences.get(propertyName, null);
if (str != null)
preference.setValue(Boolean.valueOf(str));
}
private void setObject(String propertyName, UserPreference preference)
{
String str = preferences.get(propertyName, null);
if (str != null)
preference.setValue(preference.getInstantiator().fromString(str));
}
}