blob: d2a79562fe7465b67753a323bd51196e9930680b [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* 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:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*/
package org.eclipse.osbp.ui.api.useraccess;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* The Class ASubOrganization.
*/
public class AbstractSubOrganization extends AbstractOrgElement implements ISubOrganization {
/** The title of an organization. */
private String title;
/** The position map of all positions including of its sub organizations. */
private Map<String, IPosition> positionMap = new HashMap<>();
/** The alias map to the position map. */
private Map<String, IPosition> linkAliasMap = new HashMap<>();
/**
* The position map only of the own positions without its sub organizations
* .
*/
private Map<String, IPosition> ownPositionMap = new HashMap<>();
/** The sub organization map. */
private Map<String, ISubOrganization> subOrgMap = new HashMap<>();
/**
* Gets the title.
*
* @return the title
*/
public String getTitle() {
return title;
}
/**
* Sets the title.
*
* @param title
* the new title
*/
public void setTitle(String title) {
this.title = title;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.osbp.ui.api.useraccess.IOrganizationService#getPosition(java
* .lang.String)
*/
@Override
public IPosition getPosition(String name) {
addSubOrgPositions();
return positionMap.get(name);
}
@Override
public IPosition getPositionByLinkAlias(String name) {
addSubOrgPositions();
return linkAliasMap.get(name);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.osbp.ui.api.useraccess.IOrganizationService#getPositions()
*/
@Override
public final Collection<IPosition> getPositions() {
addSubOrgPositions();
return positionMap.values();
}
/**
* Maintains the position map up to date.
*/
private void addSubOrgPositions() {
for (ISubOrganization subOrg : getSubOrganizations()) {
if(subOrg instanceof AbstractSubOrganization) {
((AbstractSubOrganization)subOrg).addSubOrgPositions();
}
for (IPosition subOrgPosition : subOrg.getOwnPositions()) {
positionMap.put(subOrgPosition.getName(), subOrgPosition);
linkAliasMap.put(subOrgPosition.getLinkAlias(), subOrgPosition);
}
}
}
@Override
public final Collection<IPosition> getOwnPositions() {
return ownPositionMap.values();
}
public final void setPosition(IPosition position) {
positionMap.put(position.getName(), position);
linkAliasMap.put(position.getLinkAlias(), position);
ownPositionMap.put(position.getName(), position);
}
public final Collection<ISubOrganization> getSubOrganizations() {
return subOrgMap.values();
}
public void setSubOrganization(ISubOrganization subOrg) {
subOrgMap.put(subOrg.getName(), subOrg);
}
}