/*******************************************************************************
* Copyright (c) 2015 IBH SYSTEMS GmbH.
* 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:
* IBH SYSTEMS GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.packagedrone.repo.channel.apm;
import static java.util.stream.Collectors.toMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.packagedrone.repo.MetaKey;
import org.eclipse.packagedrone.repo.channel.ArtifactInformation;
import org.eclipse.packagedrone.repo.channel.apm.aspect.AspectMapModel;
public class ChannelModel
{
private String description;
private boolean locked;
private Map<MetaKey, String> providedMetaData;
private Map<MetaKey, String> extractedMetaData;
private final Map<String, ArtifactModel> artifacts;
private final Map<MetaKey, CacheEntryModel> cacheEntries;
private final AspectMapModel aspects;
private List<ValidationMessageModel> validationMessages;
private Date creationTimestamp;
private Date modificationTimestamp;
public ChannelModel ()
{
this.providedMetaData = new HashMap<> ();
this.artifacts = new HashMap<> ();
this.cacheEntries = new HashMap<> ();
this.aspects = new AspectMapModel ();
this.validationMessages = new ArrayList<> ();
}
public ChannelModel ( final ChannelModel other )
{
this.creationTimestamp = other.creationTimestamp;
this.modificationTimestamp = other.modificationTimestamp;
this.description = other.description;
this.locked = other.locked;
this.extractedMetaData = new HashMap<> ( other.extractedMetaData );
this.providedMetaData = new HashMap<> ( other.providedMetaData );
// copy by ctor
this.artifacts = other.artifacts.entrySet ().stream ().collect ( toMap ( Entry::getKey, entry -> new ArtifactModel ( entry.getValue () ) ) );
this.cacheEntries = other.cacheEntries.entrySet ().stream ().collect ( toMap ( Entry::getKey, entry -> new CacheEntryModel ( entry.getValue () ) ) );
this.aspects = new AspectMapModel ( other.aspects );
this.validationMessages = other.validationMessages != null ? new ArrayList<> ( other.validationMessages ) : new ArrayList<> ();
}
public void setDescription ( final String description )
{
this.description = description;
}
public String getDescription ()
{
return this.description;
}
public void setProvidedMetaData ( final Map<MetaKey, String> providedMetaData )
{
this.providedMetaData = providedMetaData;
}
public Map<MetaKey, String> getProvidedMetaData ()
{
return this.providedMetaData;
}
public void setExtractedMetaData ( final Map<MetaKey, String> extractedMetaData )
{
this.extractedMetaData = extractedMetaData;
}
public Map<MetaKey, String> getExtractedMetaData ()
{
return this.extractedMetaData;
}
public void setLocked ( final boolean locked )
{
this.locked = locked;
}
public boolean isLocked ()
{
return this.locked;
}
public void addArtifact ( final ArtifactInformation ai )
{
this.artifacts.put ( ai.getId (), ArtifactModel.fromInformation ( ai ) );
}
public void removeArtifact ( final String artifactId )
{
this.artifacts.remove ( artifactId );
}
public Map<String, ArtifactModel> getArtifacts ()
{
return Collections.unmodifiableMap ( this.artifacts );
}
public AspectMapModel getAspects ()
{
return this.aspects;
}
public Map<MetaKey, CacheEntryModel> getCacheEntries ()
{
return this.cacheEntries;
}
public void setValidationMessages ( final List<ValidationMessageModel> validationMessages )
{
this.validationMessages = validationMessages;
}
public List<ValidationMessageModel> getValidationMessages ()
{
return this.validationMessages;
}
public void setCreationTimestamp ( final Date creationTimestamp )
{
this.creationTimestamp = creationTimestamp;
}
public Date getCreationTimestamp ()
{
return this.creationTimestamp;
}
public void setModificationTimestamp ( final Date modificationTimestamp )
{
this.modificationTimestamp = modificationTimestamp;
}
public Date getModificationTimestamp ()
{
return this.modificationTimestamp;
}
}