/* * Copyright 2013 Hewlett-Packard Development Company, L.P * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hp.alm.ali.idea.cfg; import com.hp.alm.ali.idea.services.WeakListeners; import org.jdom.Element; import java.util.ArrayList; import java.util.List; public class EntityFields implements JDOMSerialization { private WeakListeners<ColumnsChangeListener> listeners = new WeakListeners<ColumnsChangeListener>(); private final List<String> columns = new ArrayList<String>(); @Override public Element toElement(String name) { Element target = new Element(name); Element colsElem = new Element("columns"); for(String column: columns) { Element colElem = new Element("column"); colElem.setAttribute("name", column); colsElem.addContent(colElem); } target.addContent(colsElem); return target; } @Override public void fromElement(Element element) { Element colsElem = element.getChild("columns"); if(colsElem != null) { columns.clear(); for(Element child: (List<Element>)colsElem.getChildren("column")) { columns.add(child.getAttributeValue("name")); } } } public synchronized List<String> getColumns() { return new ArrayList<String>(columns); } public void setColumns(List<String> columns) { synchronized(this) { this.columns.clear(); this.columns.addAll(columns); } fireColumnsChanged(null); } public void addColumn(String column) { synchronized(this) { columns.add(column); } fireColumnsChanged(column); } public void addColumns(List<String> columns) { boolean changed = false; synchronized(this) { for (String column: columns) { if (!this.columns.contains(column)) { this.columns.add(column); changed = true; } } } if (changed) { fireColumnsChanged(null); } } public void removeColumn(String column) { synchronized(this) { if(!columns.remove(column)) { return; } } fireColumnsChanged(null); } public void moveColumn(String column, int offset) { synchronized(this) { int i = columns.indexOf(column); if(i >= 0 && i + offset < columns.size() && i + offset >= 0) { columns.remove(i); columns.add(i + offset, column); } else { return; } } fireColumnsChanged(column); } public void addColumnsChangeListener(ColumnsChangeListener listener) { listeners.add(listener); } public void removeColumnsChangeListener(ColumnsChangeListener listener) { listeners.remove(listener); } void fireColumnsChanged(final String columnToFocus) { listeners.fire(new WeakListeners.Action<ColumnsChangeListener>() { @Override public void fire(ColumnsChangeListener listener) { listener.columnsChanged(columnToFocus); } }); } public static interface ColumnsChangeListener { void columnsChanged(String columnToFocus); } }