// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.tracer2; import java.util.ArrayList; import java.util.List; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionListItem; import org.openstreetmap.josm.plugins.tracer2.preferences.ServerParam; public class TagValues { private String m_strTag = ""; private String m_strPreferredValues = ""; private int m_nPos = 0; private boolean m_bPreferred = false; private String[] m_astrTagValues = null; private String[] m_astrTagValuesPreferred = null; public TagValues() { clearAll(); } public void readBuildingTags(ServerParam param) { if (param == null || param.getTag() == null || param.getTag().equals("")) { clearAll(); return; } if (param.getTag().equals(m_strTag) && param.getPreferredValues().equals(m_strPreferredValues)) { return; } clearAll(); m_strTag = param.getTag(); m_strPreferredValues = param.getPreferredValues(); // get values List<String> tagValues = new ArrayList<>(); List<AutoCompletionListItem> values = Main.getLayerManager().getEditDataSet().getAutoCompletionManager().getValues(m_strTag); for (AutoCompletionListItem i : values) { tagValues.add(i.getValue()); } m_astrTagValues = tagValues.toArray(new String[tagValues.size()]); // get preferred values if (m_strPreferredValues.equals("")) { m_astrTagValuesPreferred = new String[0]; } else { String[] prefered = m_strPreferredValues.split(";"); tagValues = new ArrayList<>(); for (String str: prefered) { String temp = str.trim(); if (getPos(temp, m_astrTagValues) >= 0) { tagValues.add(temp); } } m_astrTagValuesPreferred = tagValues.toArray(new String[tagValues.size()]); // set to the first preferred m_bPreferred = true; m_nPos = 0; } } private void clearAll() { m_strTag = ""; m_strPreferredValues = ""; m_nPos = 0; m_bPreferred = false; m_astrTagValues = null; m_astrTagValuesPreferred = null; } public String getTag() { if (m_strTag == null || m_strTag.equals("")) { return null; } return m_strTag; } public String getTagValue() { if (m_bPreferred == false) { if (m_astrTagValues != null && m_astrTagValues.length > m_nPos) { return m_astrTagValues[m_nPos]; } } else { if (m_astrTagValuesPreferred != null && m_astrTagValuesPreferred.length > m_nPos) { return m_astrTagValuesPreferred[m_nPos]; } } return null; } private int getPos(String value, String[] values) { if (value != null && values != null) { for (int i = 0; i < values.length; i++) { if (value.equals(values[i])) { return i; } } } return -1; } public void left() { if (m_astrTagValues == null || m_astrTagValues.length == 0) { return; } if (m_bPreferred == false) { if (m_astrTagValuesPreferred == null || m_astrTagValuesPreferred.length == 0) { return; } m_bPreferred = true; m_nPos = getPos(m_astrTagValues[m_nPos], m_astrTagValuesPreferred); if (m_nPos < 0) { m_nPos = 0; return; } } m_nPos--; if (m_nPos < 0) m_nPos = m_astrTagValuesPreferred.length-1; } public void right() { if (m_astrTagValues == null || m_astrTagValues.length == 0) { return; } if (m_bPreferred == false) { if (m_astrTagValuesPreferred == null || m_astrTagValuesPreferred.length == 0) { return; } m_bPreferred = true; m_nPos = getPos(m_astrTagValues[m_nPos], m_astrTagValuesPreferred); if (m_nPos < 0) { m_nPos = 0; return; } } m_nPos++; if (m_nPos >= m_astrTagValuesPreferred.length) m_nPos = 0; } public void up() { if (m_astrTagValues == null || m_astrTagValues.length == 0) { return; } if (m_bPreferred == true) { m_bPreferred = false; m_nPos = getPos(m_astrTagValuesPreferred[m_nPos], m_astrTagValues); if (m_nPos < 0) { m_nPos = 0; return; } } m_nPos--; if (m_nPos < 0) m_nPos = m_astrTagValues.length-1; } public void down() { if (m_astrTagValues == null || m_astrTagValues.length == 0) { return; } if (m_bPreferred == true) { m_bPreferred = false; m_nPos = getPos(m_astrTagValuesPreferred[m_nPos], m_astrTagValues); if (m_nPos < 0) { m_nPos = 0; return; } } m_nPos++; if (m_nPos >= m_astrTagValues.length) m_nPos = 0; } }