package com.idega.content.themes.helpers.bean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.builder.bean.AdvancedProperty;
import com.idega.content.themes.helpers.business.ThemeChanger;
import com.idega.util.CoreConstants;
import com.idega.util.expression.ELUtil;
public class Theme {
private boolean propertiesExtracted;
private boolean locked;
private boolean newTheme;
private boolean loading = true;
private String id;
private String linkToSkeleton;
private String linkToDraft;
private String linkToProperties;
private String linkToBase;
private String linkToBaseAsItIs;
private String linkToSmallPreview;
private String name;
private String changedName;
private String currentlyUsedBuiltInStyleUri = null;
private List<String> styleGroupsNames;
private List<String> styleVariationsCacheKeys;
private List<String> colourFiles = null;
private List<String> originalColourFiles = null;
private List<ThemeChange> changes;
private List<AdvancedProperty> extraRegions = null;
private List<BuiltInThemeStyle> builtInStyles = null;
private Map<String, ThemeStyleGroupMember> styleGroupsMembers;
private Map<String, String> styleVariables = null;
private int templateId = -1;
@Autowired
private ThemeChanger themeChanger;
public Theme(String id) {
this.styleGroupsNames = new ArrayList<String>();
this.styleVariationsCacheKeys = new ArrayList<String>();
this.colourFiles = new ArrayList<String>();
this.originalColourFiles = new ArrayList<String>();
this.extraRegions = new ArrayList<AdvancedProperty>();
this.changes = new ArrayList<ThemeChange>();
this.builtInStyles = new ArrayList<BuiltInThemeStyle>();
this.styleGroupsMembers = new HashMap<String, ThemeStyleGroupMember>();
this.styleVariables = new HashMap<String, String>();
this.id = id;
}
public String getLinkToSkeleton() {
return linkToSkeleton;
}
public void setLinkToSkeleton(String linkToSkeleton) {
this.linkToSkeleton = linkToSkeleton;
}
public String getId() {
return id;
}
public String getLinkToProperties() {
return linkToProperties;
}
public void setLinkToProperties(String linkToProperties) {
this.linkToProperties = linkToProperties;
}
public String getLinkToBase() {
return linkToBase;
}
public void setLinkToBase(String themeBase) {
this.linkToBase = themeBase;
}
public boolean isPropertiesExtracted() {
return propertiesExtracted;
}
public void setPropertiesExtracted(boolean propertiesExtracted) {
this.propertiesExtracted = propertiesExtracted;
}
public String getName() {
return name;
}
public void setName(String themeName) {
this.name = themeName;
}
public List<String> getStyleGroupsNames() {
return styleGroupsNames;
}
public void addStyleGroupName(String styleGroupName) {
this.styleGroupsNames.add(styleGroupName);
}
public Map<String, ThemeStyleGroupMember> getStyleGroupsMembers() {
return styleGroupsMembers;
}
public ThemeStyleGroupMember getStyleGroupsMember(String styleGroupName) {
if (styleGroupsMembers == null) {
return null;
}
return styleGroupsMembers.get(styleGroupName);
}
public void addStyleGroupMember(String styleGroupName, ThemeStyleGroupMember groupMember) {
styleGroupsMembers.put(styleGroupName, groupMember);
}
public String getLinkToDraft() {
return linkToDraft;
}
public void setLinkToDraft(String linkToDraft) {
this.linkToDraft = linkToDraft;
}
public boolean isLocked() {
return locked;
}
public synchronized void setLocked(boolean locked) {
this.locked = locked;
}
public boolean isNewTheme() {
return newTheme;
}
public void setNewTheme(boolean newTheme) {
this.newTheme = newTheme;
}
public String getLinkToSmallPreview() {
return linkToSmallPreview;
}
public void setLinkToSmallPreview(String linkToSmallPreview) {
this.linkToSmallPreview = linkToSmallPreview;
}
public String getLinkToBaseAsItIs() {
return linkToBaseAsItIs;
}
public void setLinkToBaseAsItIs(String linkToBaseAsItIs) {
this.linkToBaseAsItIs = linkToBaseAsItIs;
}
public String getChangedName() {
return changedName;
}
public void setChangedName(String changedName) {
this.changedName = changedName;
}
public List<ThemeChange> getChanges() {
return changes;
}
public void setChanges(List<ThemeChange> changes) {
this.changes = changes;
}
public void addThemeChange(ThemeChange change) {
changes.add(0, change);
}
public boolean isLoading() {
return loading;
}
public synchronized void setLoading(boolean loading) {
this.loading = loading;
}
public int getIBPageID() {
return templateId;
}
public void setIBPageID(int pageID) {
templateId = pageID;
}
public void addStyleVariationsCacheKey(String cacheKey) {
if (styleVariationsCacheKeys.contains(cacheKey)) {
return;
}
styleVariationsCacheKeys.add(cacheKey);
}
public List<String> getStyleVariationsCacheKeys() {
return styleVariationsCacheKeys;
}
public void clearStyleVariationsCacheKeys() {
styleVariationsCacheKeys.clear();
}
public void clearProperties() {
// These properties can be reloaded from plist file
styleGroupsNames.clear();
styleVariationsCacheKeys.clear();
styleGroupsMembers.clear();
colourFiles.clear();
originalColourFiles.clear();
styleVariables.clear();
}
public List<String> getColourFiles() {
return colourFiles;
}
public void setColourFiles(List<String> colourFiles) {
this.colourFiles = colourFiles;
}
public void addColourFile(String colourFile) {
if (colourFile == null) {
return;
}
if (!colourFiles.contains(colourFile)) {
colourFiles.add(colourFile);
}
}
public void addOriginalColourFile(String originalColourFile) {
if (originalColourFile == null) {
return;
}
if (!originalColourFiles.contains(originalColourFile)) {
originalColourFiles.add(originalColourFile);
}
}
public void addStyleVariable(String variable, String value) {
if (variable == null || value == null) {
return;
}
if (value.indexOf(CoreConstants.SPACE) != -1) {
String[] values = value.split(CoreConstants.SPACE);
value = values[0];
}
styleVariables.put(variable, value);
}
public Map<String, String> getStyleVariables() {
return styleVariables;
}
public List<String> getStyleVariablesKeys() {
return new ArrayList<String>(styleVariables.keySet());
}
public String getStyleVariableValue(String variable) {
if (variable == null) {
return null;
}
return styleVariables.get(variable);
}
public List<String> getOriginalColourFiles() {
return originalColourFiles;
}
public void setOriginalColourFiles(List<String> originalColourFiles) {
this.originalColourFiles = originalColourFiles;
}
public boolean hasColourFiles() {
if (colourFiles == null || colourFiles.size() == 0) {
return false;
}
return true;
}
public void addExtraRegion(String parentRegion, String childRegion) {
this.extraRegions.add(new AdvancedProperty(parentRegion, childRegion));
}
public List<AdvancedProperty> getExtraRegions() {
return extraRegions;
}
public void setExtraRegions(List<AdvancedProperty> extraRegions) {
this.extraRegions = extraRegions;
}
public List<BuiltInThemeStyle> getBuiltInThemeStyles() {
return builtInStyles;
}
public void addBuiltInStyle(BuiltInThemeStyle style) {
this.builtInStyles.add(style);
}
public BuiltInThemeStyle getBuiltInThemeStyle(String id) {
if (id == null) {
return null;
}
for (BuiltInThemeStyle style: getBuiltInThemeStyles()) {
if (style.getId().equals(id)) {
return style;
}
}
return null;
}
public String getCurrentlyUsedBuiltInStyleUri() {
return currentlyUsedBuiltInStyleUri;
}
public void setCurrentlyUsedBuiltInStyleUri(String currentlyUsedBuiltInStyleUri) {
this.currentlyUsedBuiltInStyleUri = currentlyUsedBuiltInStyleUri;
}
public List<ThemeStyleGroupMember> getEnabledStyles() {
try {
return getThemeChanger().getEnabledStyles(this);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public ThemeChanger getThemeChanger() {
if (themeChanger == null) {
ELUtil.getInstance().autowire(this);
}
return themeChanger;
}
public void setThemeChanger(ThemeChanger themeChanger) {
this.themeChanger = themeChanger;
}
@Override
public String toString() {
return "Theme @".concat(linkToSkeleton);
}
}