/*******************************************************************************
* Copyright (c) 2008 Pierre-Antoine Grégoire.
* 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:
* Pierre-Antoine Grégoire - initial API and implementation
*******************************************************************************/
package org.org.eclipse.cheatsheet.catalog.internal.model;
import org.org.model.AbstractModelItem;
import org.org.model.RootModelItem;
public class CheatSheetCatalog extends AbstractModelItem<RootModelItem<CheatSheetCatalog>, CheatSheetCategory> {
private String name;
private String provider;
private String description;
private Boolean readOnly = true;
private CheatSheetCatalogReference reference;
public CheatSheetCatalog(String name, String provider) {
super();
this.name = name;
this.provider = provider;
}
public String getName() {
return name;
}
@Override
public String getUID() {
return reference != null ? reference.toString() : name;
}
@Override
public StringBuilder toStringBuilderDescription() {
StringBuilder stringBuilder = new StringBuilder();
if (reference != null) {
stringBuilder.append("reference: " + reference + ";");
}
stringBuilder.append("name: " + name + ";");
stringBuilder.append("provider: " + provider + ";");
return stringBuilder;
}
public String getProvider() {
return provider;
}
public Boolean getReadOnly() {
return readOnly;
}
public void setReadOnly(Boolean readOnly) {
this.readOnly = readOnly;
}
/**
* This implementation of the duplicate method will result in a writable CheatSheetCatalog with a different id.
*/
public CheatSheetCatalog duplicate(Object... changedData) {
if (changedData == null || changedData.length != 2 || !(changedData[0] instanceof String)) {
throw new IllegalArgumentException("duplicate method takes a java.lang.String (new catalog's name) as a parameter.");
}
String name = changedData[0] == null ? this.name : (String) changedData[0];
String provider = changedData[1] == null ? this.provider : (String) changedData[1];
CheatSheetCatalog duplicatedCatalog = new CheatSheetCatalog(name, provider);
if (this.getReference() != null) {
duplicatedCatalog.setReference(new CheatSheetCatalogReference(CheatSheetCatalogReferenceType.LOCAL, "duplicated-" + this.getReference().getUri()));
}
duplicatedCatalog.setReadOnly(false);
for (CheatSheetCategory childCategory : this.getChildren()) {
CheatSheetCategory duplicatedCategory = new CheatSheetCategory(childCategory.getName());
for (CheatSheetReference childReference : childCategory.getChildren()) {
CheatSheetReference duplicatedReference = new CheatSheetReference(childReference.getType(), childReference.getId(), childReference.getName(), childReference.getUrl(), childReference.getTags());
duplicatedCategory.addChild(duplicatedReference);
}
duplicatedCatalog.addChild(duplicatedCategory);
}
return duplicatedCatalog;
}
public CheatSheetCatalogReference getReference() {
return reference;
}
public void setReference(CheatSheetCatalogReference reference) {
this.reference = reference;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}