/*******************************************************************************
* Copyright (c) 2006 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
* IBM Research
*******************************************************************************/
package com.ibm.research.tagging.core.impl;
import java.util.ArrayList;
import java.util.List;
import com.ibm.research.tagging.core.ITagCore;
import com.ibm.research.tagging.core.ITagModel;
import com.ibm.research.tagging.core.IWaypointModel;
import com.ibm.research.tagging.core.IWaypointModelExtension;
/**
*
* @author mdesmond
*
*/
public class TagCore implements ITagCore
{
private TagModel fTagCollection;
private WaypointModel fWaypointCollection;
private List<IWaypointModelExtension> fExtensions;
private TagSerializer fTagSerializer;
public TagCore()
{
fTagCollection = new TagModel();
fWaypointCollection = new WaypointModel();
}
/**
* Start the tag Model, this should be called in a non ui thread
* as to not hang the workspace ui
*/
public void start()
{
getTagSerializer().deSerialize(getTagModel());
long startTime = System.currentTimeMillis();
for(IWaypointModelExtension extension : getExtensions())
{
extension.initialize(this);
System.out.println("Initialized extension " + extension.getClass() + " in roughly " + (System.currentTimeMillis() - startTime) + " ms");
startTime = System.currentTimeMillis();
}
startTime = System.currentTimeMillis();
for(IWaypointModelExtension extension : getExtensions())
{
extension.loadWaypoints();
System.out.println("Loaded waypoints for " + extension.getClass() + " in roughly " + (System.currentTimeMillis() - startTime) + " ms");
startTime = System.currentTimeMillis();
}
}
/**
* Shut down the tag Model
*/
public void stop()
{
getTagSerializer().serialize(getTagModel());
for(IWaypointModelExtension extension : getExtensions())
extension.saveWaypoints();
}
/*
* (non-Javadoc)
* @see com.ibm.research.tagging.core.ITagModel#getTagCollection()
*/
public ITagModel getTagModel()
{
return fTagCollection;
}
/*
* (non-Javadoc)
* @see com.ibm.research.tagging.core.ITagModel#getWaypointCollection()
*/
public IWaypointModel getWaypointModel()
{
return fWaypointCollection;
}
/*
* (non-Javadoc)
* @see com.ibm.research.tagging.core.ITagModel#addTagModelExtension(com.ibm.research.tagging.core.ITagModelExtension)
*/
public void addWaypointModelExtension(IWaypointModelExtension extension)
{
if(!getExtensions().contains(extension))
getExtensions().add(extension);
}
/*
* (non-Javadoc)
* @see com.ibm.research.tagging.core.ITagModel#removeTagModelExtension(com.ibm.research.tagging.core.ITagModelExtension)
*/
public void removeWaypointModelExtension(IWaypointModelExtension extension)
{
getExtensions().remove(extension);
}
/**
* Get the extension list
* @return
*/
protected List<IWaypointModelExtension> getExtensions()
{
if(fExtensions == null)
fExtensions = new ArrayList<IWaypointModelExtension>();
return fExtensions;
}
/**
* Get the tag serializer
* @return
*/
protected TagSerializer getTagSerializer()
{
if(fTagSerializer == null)
fTagSerializer = new TagSerializer();
return fTagSerializer;
}
}