trace/tracebuilder/com.nokia.tracebuilder.view/src/com/nokia/tracebuilder/view/TraceModelWrapper.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/trace/tracebuilder/com.nokia.tracebuilder.view/src/com/nokia/tracebuilder/view/TraceModelWrapper.java Wed Jun 23 14:35:40 2010 +0300
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+* Wrapper for the TraceModel object
+*
+*/
+package com.nokia.tracebuilder.view;
+
+import java.util.Iterator;
+
+import com.nokia.tracebuilder.engine.TraceLocationList;
+import com.nokia.tracebuilder.model.TraceConstantTable;
+import com.nokia.tracebuilder.model.TraceGroup;
+import com.nokia.tracebuilder.model.TraceModel;
+
+/**
+ * Wrapper for the TraceModel object
+ *
+ */
+final class TraceModelWrapper extends TraceObjectWrapper {
+
+ /**
+ * Trace groups list
+ */
+ private TraceGroupListWrapper traceGroupListWrapper;
+
+ /**
+ * Constant tables list
+ */
+ private ConstantTableListWrapper traceConstantTableListWrapper;
+
+ /**
+ * List of location lists
+ */
+ private TraceLocationListsWrapper traceLocationListsWrapper;
+
+ /**
+ * Constructor
+ *
+ * @param model
+ * the trace model
+ * @param parent
+ * parent wrapper
+ * @param updater
+ * the update notifier
+ */
+ TraceModelWrapper(TraceModel model, WrapperBase parent,
+ WrapperUpdater updater) {
+ super(model, parent, updater);
+ addGroups();
+ addTables();
+ addLocationLists();
+ }
+
+ /**
+ * Adds a new trace group
+ *
+ * @param group
+ * the trace group
+ * @return the wrapper which needs to be refreshed
+ */
+ WrapperBase addGroup(TraceGroup group) {
+ WrapperBase wrapper;
+ if (traceGroupListWrapper.hasChildren()) {
+ wrapper = traceGroupListWrapper.addGroup(group);
+ } else {
+ traceGroupListWrapper.addGroup(group);
+ add(traceGroupListWrapper);
+ wrapper = this;
+ }
+ return wrapper;
+ }
+
+ /**
+ * Removes a trace group
+ *
+ * @param group
+ * the group to be removed
+ * @return the wrapper which needs to be refreshed
+ */
+ WrapperBase removeGroup(TraceGroup group) {
+ WrapperBase wrapper = traceGroupListWrapper.removeGroup(group);
+ if (!traceGroupListWrapper.hasChildren()) {
+ hide(traceGroupListWrapper);
+ wrapper = this;
+ }
+ return wrapper;
+ }
+
+ /**
+ * Adds a new constant table
+ *
+ * @param table
+ * the constant table
+ * @return the wrapper which needs to be refreshed
+ */
+ WrapperBase addConstantTable(TraceConstantTable table) {
+ WrapperBase wrapper;
+ if (traceConstantTableListWrapper.hasChildren()) {
+ wrapper = traceConstantTableListWrapper.addConstantTable(table);
+ } else {
+ traceConstantTableListWrapper.addConstantTable(table);
+ add(traceConstantTableListWrapper);
+ wrapper = this;
+ }
+ return wrapper;
+ }
+
+ /**
+ * Removes a constant table
+ *
+ * @param table
+ * the constant table to be removed
+ * @return the wrapper which needs to be refreshed
+ */
+ WrapperBase removeConstantTable(TraceConstantTable table) {
+ WrapperBase wrapper = traceConstantTableListWrapper
+ .removeConstantTable(table);
+ if (!traceConstantTableListWrapper.hasChildren()) {
+ hide(traceConstantTableListWrapper);
+ wrapper = this;
+ }
+ return wrapper;
+ }
+
+ /**
+ * Adds a location list
+ *
+ * @param list
+ * the location list
+ * @return the wrapper to be updated
+ */
+ WrapperBase addLocationList(TraceLocationList list) {
+ WrapperBase retval = traceLocationListsWrapper.addLocationList(list);
+ if (!contains(traceLocationListsWrapper) && list.hasLocations()) {
+ add(traceLocationListsWrapper);
+ retval = this;
+ }
+ return retval;
+ }
+
+ /**
+ * Removes a location list
+ *
+ * @param list
+ * the list to be removed
+ * @return the wrapper to be updated
+ */
+ WrapperBase removeLocationList(TraceLocationList list) {
+ WrapperBase retval = traceLocationListsWrapper.removeLocationList(list);
+ if (!hasEntries((TraceModel) getTraceObject())) {
+ hide(traceLocationListsWrapper);
+ retval = this;
+ }
+ return retval;
+ }
+
+ /**
+ * Called when model is reset
+ */
+ void modelReset() {
+ // Locations lists may be hidden
+ if (!contains(traceLocationListsWrapper)) {
+ traceLocationListsWrapper.delete();
+ }
+ clear();
+ // New list objects need to be created since clear deletes them
+ addGroups();
+ addTables();
+ addExtensions();
+ addProperties();
+ addLocationLists();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.nokia.tracebuilder.view.TraceObjectWrapper#delete()
+ */
+ @Override
+ void delete() {
+ if (!contains(traceLocationListsWrapper)) {
+ traceLocationListsWrapper.delete();
+ }
+ if (!contains(traceConstantTableListWrapper)) {
+ traceConstantTableListWrapper.delete();
+ }
+ if (!contains(traceGroupListWrapper)) {
+ traceGroupListWrapper.delete();
+ }
+ super.delete();
+ }
+
+ /**
+ * Adds the trace groups list
+ */
+ private void addGroups() {
+ TraceModel model = (TraceModel) getTraceObject();
+ traceGroupListWrapper = new TraceGroupListWrapper(model, this,
+ getUpdater());
+ if (model.hasGroups()) {
+ add(traceGroupListWrapper);
+ }
+ }
+
+ /**
+ * Adds the constant tables list
+ */
+ private void addTables() {
+ TraceModel model = (TraceModel) getTraceObject();
+ traceConstantTableListWrapper = new ConstantTableListWrapper(model,
+ this, getUpdater());
+ if (model.hasConstantTables()) {
+ add(traceConstantTableListWrapper);
+ }
+ }
+
+ /**
+ * Adds the locations lists list
+ */
+ private void addLocationLists() {
+ TraceModel model = (TraceModel) getTraceObject();
+ traceLocationListsWrapper = new TraceLocationListsWrapper(model, this,
+ getUpdater());
+ if (hasEntries(model)) {
+ add(traceLocationListsWrapper);
+ }
+ }
+
+ /**
+ * Checks if the sub-lists have entries
+ *
+ * @param model
+ * the model
+ * @return true if there are entries, false if not
+ */
+ private boolean hasEntries(TraceModel model) {
+ Iterator<TraceLocationList> itr = model
+ .getExtensions(TraceLocationList.class);
+ boolean hasEntries = false;
+ while (itr.hasNext() && !hasEntries) {
+ hasEntries = itr.next().hasLocations();
+ }
+ return hasEntries;
+ }
+
+}