/*
* Lokomo OneCMDB - An Open Source Software for Configuration
* Management of Datacenter Resources
*
* Copyright (C) 2006 Lokomo Systems AB
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via
* paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33
* Danderyd, Sweden.
*
*/
package org.onecmdb.core.internal.reference;
import java.util.List;
import java.util.Set;
import org.onecmdb.core.IAttribute;
import org.onecmdb.core.ICi;
import org.onecmdb.core.IObjectScope;
import org.onecmdb.core.IType;
import org.onecmdb.core.IValue;
import org.onecmdb.core.internal.model.BasicAttribute;
import org.onecmdb.core.internal.model.ConfigurationItem;
import org.onecmdb.core.internal.model.ItemId;
import org.onecmdb.core.internal.storage.IDaoReader;
/**
* Might create this as a real Object that exists in the db, but for now it's
* just a Wrapper help class. Could think it could look like this: implements
* IConnectionType
*
* Internal class must be used under a Transaction scope.
*
* @author niklas
*
*/
public class ConnectionItem {
private ICi ci;
private IDaoReader daoReader;
public ConnectionItem(IDaoReader reader, ICi ci) {
this.ci = ci;
this.daoReader = reader;
}
public void setTarget(ICi target, IObjectScope scope) {
IAttribute targetAttribute = getAttribute(scope.getAttributesForCi(ci),
"target");
if (targetAttribute instanceof BasicAttribute) {
((BasicAttribute) targetAttribute).setType((IType) target);
((BasicAttribute) targetAttribute)
.setValueAsString(((IValue) target).getAsString());
}
}
public ICi getTarget() {
if (ci instanceof ConfigurationItem) {
ConfigurationItem ciItem = (ConfigurationItem)ci;
Long targetId = ciItem.getTargetId();
if (targetId != null) {
return(this.daoReader.findById(new ItemId(targetId)));
}
}
IAttribute target = getUniqAttribute(ci.getAttributesWithAlias("target"));
if (target == null) {
return (null);
}
ICi ci = null;
if (target instanceof BasicAttribute) {
// Will use the Reference Ci's type (ICI type) to laod the ICi!
ci = (ICi) target.getValue();
}
return (ci);
}
protected IAttribute getUniqAttribute(List<IAttribute> list) {
if (list.size() == 1) {
return(list.get(0));
}
return(null);
}
protected IAttribute getAttribute(Set<IAttribute> set, String alias) {
for (IAttribute a : set) {
if (a.getAlias().equals(alias)) {
return (a);
}
}
return (null);
}
}