--- /dev/null
+/*
+ * Created on 11/08/2003
+ *
+ */
+package com.quantum.util;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import com.quantum.QuantumPlugin;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * Class to clasify two levels of strings. It's called Nth Level but in fact it has only two levels :o)
+ * @author panic
+ *
+ */
+public class NthLevelConverter {
+ private final int DEFAULT_COLUMNS = 10;
+ private final int DEFAULT_INCREMENT = 10;
+
+ private Vector upper = new Vector(DEFAULT_COLUMNS,DEFAULT_INCREMENT);
+
+ public void add(String id, String parentId, int level) {
+ OneLevelConverter upperLine = new OneLevelConverter(id);
+ if (level == 1) { // If it's an upper leaf
+ if (!upper.contains(upperLine))
+ this.upper.add(upperLine);
+ }
+ else if (level == 0) { // It's a lower leaf
+ if (parentId == null) return; // No parent, what shall we do.
+ OneLevelConverter upperFinder = new OneLevelConverter(parentId);
+ // Search if its parent is already present in the upper level
+ int ind = upper.indexOf(upperFinder);
+ // If not, addIt and find its index
+ if (ind < 0) {
+ this.upper.add(upperFinder);
+ ind = upper.indexOf(upperFinder);
+ }
+ OneLevelConverter upperItem = (OneLevelConverter) upper.get(ind);
+ // If it has no children, we create a new Vector for the children
+ if (upperItem.getLower() == null)
+ upperItem.setLower(new Vector(DEFAULT_COLUMNS,DEFAULT_INCREMENT));
+ Vector children = upperItem.getLower();
+ // Is the item already present in the children of its parent?
+ int indChildren = children.indexOf(id);
+ // If it's not, we add it
+ if (indChildren < 0) {
+ OneLevelConverter leaf = new OneLevelConverter(id);
+ children.add(leaf);
+ }
+ }
+
+ }
+
+
+ /**
+ * @return
+ */
+ public Vector getUpper() {
+ return upper;
+ }
+
+ public Vector getLevel(String id, int level){
+ if (level == 1)
+ return upper;
+ else if (level == 0){
+ if (id == null) return null;
+ OneLevelConverter upperFinder = new OneLevelConverter(id);
+ int ind = upper.indexOf(upperFinder);
+ if (ind < 0)
+ return null;
+ else {
+ OneLevelConverter upperItem = (OneLevelConverter) upper.get(ind);
+ return upperItem.getLower();
+ }
+ }
+ return null;
+ }
+
+ public void convert(String ind){
+ IPreferenceStore store = QuantumPlugin.getDefault().getPreferenceStore();
+
+ String tableItem = QuantumUtil.trasposeEscape(store.getString("customCopyTableItem" + ind));
+ String tableSeparator = QuantumUtil.trasposeEscape(store.getString("customCopyTableSeparator" + ind));
+ String columnItem = QuantumUtil.trasposeEscape(store.getString("customCopyColumnItem" + ind));
+ String columnSeparator = QuantumUtil.trasposeEscape(store.getString("customCopyColumnSeparator" + ind));
+
+ for (Iterator iter = upper.iterator(); iter.hasNext();) {
+ OneLevelConverter oneLevel = (OneLevelConverter) iter.next();
+ String upperId = oneLevel.getId();
+ Vector lower = oneLevel.getLower();
+ if (lower != null) {
+ for (Iterator iterator = lower.iterator(); iterator.hasNext();) {
+ OneLevelConverter element = (OneLevelConverter) iterator.next();
+ String convLeaf = columnItem + (iterator.hasNext() ? columnSeparator : "");
+
+ convLeaf = StringUtil.substituteString(convLeaf, "${schema}", QuantumUtil.getSchemaName(upperId));
+ convLeaf = StringUtil.substituteString(convLeaf, "${qualified}", upperId);
+ convLeaf = StringUtil.substituteString(convLeaf, "${table}", QuantumUtil.getTableName(upperId));
+ convLeaf = StringUtil.substituteString(convLeaf, "${column}", element.getId());
+
+ element.setResult(convLeaf);
+ }
+ }
+ // We have all the leafs converted, we calculate the parent conversion
+ String convUpper = tableItem + (iter.hasNext() ? tableSeparator : "");
+ convUpper = StringUtil.substituteString(convUpper, "${schema}", QuantumUtil.getSchemaName(upperId));
+ convUpper = StringUtil.substituteString(convUpper, "${qualified}", upperId);
+ convUpper = StringUtil.substituteString(convUpper, "${table}", QuantumUtil.getTableName(upperId));
+ convUpper = StringUtil.substituteString(convUpper, "${column_list}", getColumnList(oneLevel));
+
+ oneLevel.setResult(convUpper);
+ }
+ }
+
+
+ /**
+ * Calculates the list of columns for an upper level converter. Has to be already converted.
+ * @param oneLevel
+ * @return
+ */
+ private String getColumnList(OneLevelConverter oneLevel) {
+
+ String result = "";
+ Vector lower = oneLevel.getLower();
+ if (lower != null) {
+ for (Iterator iterator = lower.iterator(); iterator.hasNext();) {
+ OneLevelConverter element = (OneLevelConverter) iterator.next();
+ result += element.getResult();
+ }
+ }
+ return result;
+ }
+
+ public String getTableList() {
+ String result = "";
+ for (Iterator iter = upper.iterator(); iter.hasNext();) {
+ OneLevelConverter oneLevel = (OneLevelConverter) iter.next();
+ result += oneLevel.getResult();
+ }
+ return result;
+ }
+}