/*
* #%L
* =====================================================
* _____ _ ____ _ _ _ _
* |_ _|_ __ _ _ ___| |_ / __ \| | | | ___ | | | |
* | | | '__| | | / __| __|/ / _` | |_| |/ __|| |_| |
* | | | | | |_| \__ \ |_| | (_| | _ |\__ \| _ |
* |_| |_| \__,_|___/\__|\ \__,_|_| |_||___/|_| |_|
* \____/
*
* =====================================================
*
* Hochschule Hannover
* (University of Applied Sciences and Arts, Hannover)
* Faculty IV, Dept. of Computer Science
* Ricklinger Stadtweg 118, 30459 Hannover, Germany
*
* Email: trust@f4-i.fh-hannover.de
* Website: http://trust.f4.hs-hannover.de/
*
* This file is part of visitmeta-common, version 0.6.0,
* implemented by the Trust@HsH research group at the Hochschule Hannover.
* %%
* Copyright (C) 2012 - 2016 Trust@HsH
* %%
* 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.
* #L%
*/
package de.hshannover.f4.trust.visitmeta.implementations;
import java.util.ArrayList;
import java.util.List;
import de.hshannover.f4.trust.visitmeta.implementations.internal.InternalIdentifier;
import de.hshannover.f4.trust.visitmeta.interfaces.Identifier;
import de.hshannover.f4.trust.visitmeta.interfaces.IdentifierGraph;
public class IdentifierGraphImpl implements IdentifierGraph {
/**
* List of all Identifiers that are in the graph.
*/
private List<Identifier> mIdentifiers;
/**
* Unix Epoch representing the time of the last update to the graph.
*/
private long mTimestamp;
public IdentifierGraphImpl(long timestamp) {
mTimestamp = timestamp;
mIdentifiers = new ArrayList<Identifier>();
}
@Override
public Identifier getStartIdentifier() {
return null;
}
@Override
public List<Identifier> getIdentifiers() {
return mIdentifiers;
}
@Override
public long getTimestamp() {
return mTimestamp;
}
/**
* Searches the graph for an {@link IdentifierImpl} representation of the
* {@link InternalIdentifier} passed as argument.
* @param id {@link InternalIdentifier} to look for.
* @return
* {@link IdentifierImpl} representation of the {@link InternalIdentifier} passed as argument.
* Null otherwise.
*/
public IdentifierImpl findIdentifier(InternalIdentifier id) {
for (Identifier identifier : mIdentifiers) {
if (id.sameAs(identifier)) {
return (IdentifierImpl)identifier;
}
}
return null;
}
/**
* Searches the graph for a specific {@link IdentifierImpl} representation of the
* {@link InternalIdentifier} passed as argument.
* @param id {@link InternalIdentifier} to look for.
* @return
* {@link IdentifierImpl} representation of the {@link InternalIdentifier} passed as argument.
* Null otherwise.
*/
public IdentifierImpl findIdentifier(IdentifierImpl id) {
for (Identifier identifier : mIdentifiers) {
if (id.equals(identifier)) {
return (IdentifierImpl)identifier;
}
}
return null;
}
/**
* Takes an {@link Identifier and inserts it into the graph by copying its data into a
* {@link IdentifierImpl} representation.
* @param id
*/
public void insert(Identifier id) {
mIdentifiers.add(id);
}
/**
* Connects two Identifiers in the graph by creating a link and adding it to each Identifier
* @param id1
* @param id2
* @return The freshly created link.
*/
public LinkImpl connect(IdentifierImpl id1,
IdentifierImpl id2) {
if (mIdentifiers.contains(id1) && mIdentifiers.contains(id2)) {
LinkImpl l = new LinkImpl(id1, id2);
id1.addLink(l);
id2.addLink(l);
return l;
}
throw new IllegalArgumentException(
"Trying to connect two Identifiers of which at least one is not in the graph ... "+
"we strongly disapprove");
}
}