/*******************************************************************************
* Copyright (c) 2009 the CHISEL group and contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Del Myers - initial API and implementation
*******************************************************************************/
package ca.uvic.chisel.javasketch.data.model.imple.internal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.TreeMap;
import ca.uvic.chisel.javasketch.data.SketchDataPlugin;
import ca.uvic.chisel.javasketch.data.model.ITraceClass;
import ca.uvic.chisel.javasketch.data.model.ITraceClassMethod;
/**
* @author Del Myers
*
*/
public class TraceClassImpl extends TraceModelViewBase implements ITraceClass {
private TreeMap<String, ITraceClassMethod> methods;
private String qualifiedName;
private boolean dirty;
/**
* @param trace
* @param results
* @throws SQLException
*/
public TraceClassImpl(TraceImpl trace, String qualifiedName) {
super(trace, getIdentifier(qualifiedName));
methods = new TreeMap<String, ITraceClassMethod>();
dirty = true;
this.qualifiedName = qualifiedName;
}
/* (non-Javadoc)
* @see ca.uvic.chisel.javasketch.data.model.imple.internal.TraceModelImpl#load()
*/
@Override
public void load() {
//does nothing
}
/* (non-Javadoc)
* @see ca.uvic.chisel.javasketch.data.model.ITraceClass#findMethod(java.lang.String, java.lang.String)
*/
public synchronized ITraceClassMethod findMethod(String name, String signature) {
ITraceClassMethod method = methods.get(name + signature);
try {
if (method == null) {
ResultSet results = getDataUtils().findMethod(getName(), name, signature);
if (results != null) {
method = new TraceClassMethodImpl(this, name, signature);
methods.put(name+signature, method);
}
}
} catch (SQLException e) {
SketchDataPlugin.getDefault().log(e);
}
return method;
}
/* (non-Javadoc)
* @see ca.uvic.chisel.javasketch.data.model.ITraceClass#getMethods()
*/
public synchronized Collection<ITraceClassMethod> getMethods() {
try {
if (dirty || methods.size() != getDataUtils().getMethodCount(getName())) {
ResultSet results = getDataUtils().getMethodsByClass(getName());
while (results.next()) {
try {
String name = results.getString("method_name");
String signature = results.getString("method_signature");
if (!methods.containsKey(name+signature)) {
ITraceClassMethod method = new TraceClassMethodImpl(this, name, signature);
methods.put(name+signature, method);
}
} catch (SQLException e) {
SketchDataPlugin.getDefault().log(e);
}
}
dirty = false;
}
} catch (SQLException e) {
SketchDataPlugin.getDefault().log(e);
}
return Collections.unmodifiableCollection(methods.values());
}
/* (non-Javadoc)
* @see ca.uvic.chisel.javasketch.data.model.ITraceClass#getName()
*/
public String getName() {
return qualifiedName;
}
/* (non-Javadoc)
* @see ca.uvic.chisel.javasketch.data.model.imple.internal.TraceModelImpl#unload()
*/
@Override
public synchronized void unload() {
for (ITraceClassMethod m : methods.values()) {
((TraceClassMethodImpl)m).unload();
}
}
/**
* @param b
*/
synchronized void setDirty(boolean b) {
dirty = b;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return getName();
}
/* (non-Javadoc)
* @see ca.uvic.chisel.javasketch.data.model.ITraceModel#getKind()
*/
public int getKind() {
return TRACE_CLASS;
}
public static final String getIdentifier(String qualifiedName) {
return "[TRACECLASS]," + qualifiedName;
}
}