package com.idega.content.themes.helpers.business;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.content.themes.helpers.bean.Theme;
import com.idega.util.CoreConstants;
import com.idega.util.expression.ELUtil;
public class ThemesLoader {
private Theme theme;
@Autowired
private ThemesHelper helper;
public boolean loadTheme(String originalUri, String encodedUri, boolean newTheme, boolean manuallyCreated) {
if (encodedUri == null || originalUri == null) {
return false;
}
if (getThemesHelper().existTheme(originalUri) || getThemesHelper().existTheme(encodedUri)) {
return false;
}
if (encodedUri.startsWith(CoreConstants.WEBDAV_SERVLET_URI)) {
encodedUri = getUriWithoutContent(encodedUri);
}
if (originalUri.startsWith(CoreConstants.WEBDAV_SERVLET_URI)) {
originalUri = getUriWithoutContent(originalUri);
}
if (createNewTheme(originalUri, encodedUri, newTheme, manuallyCreated) == null) {
return false;
}
return true;
}
public synchronized boolean loadThemes(List<String> skeletons, boolean newThemes, boolean manuallyCreated) {
if (skeletons == null) {
return false;
}
boolean result = true;
for (int i = 0; (i < skeletons.size() && result); i++) {
result = loadTheme(getThemesHelper().decodeUrl(skeletons.get(i)), skeletons.get(i), newThemes, manuallyCreated);
}
return result;
}
private void initTheme(boolean newTheme) {
if (theme == null) {
theme = new Theme(getThemeId());
theme.setNewTheme(newTheme);
}
}
private boolean addThemeInfo() {
if (theme == null) {
return false;
}
List<Theme> themes = getThemesHelper().getAvailableThemes();
if (themes == null) {
return false;
}
if (!themes.contains(theme)) {
getThemesHelper().addTheme(theme);
}
theme = null;
return true;
}
private String getUriWithoutContent(String uri) {
int index = uri.indexOf(CoreConstants.WEBDAV_SERVLET_URI);
if (index == -1) {
return uri;
}
index += CoreConstants.WEBDAV_SERVLET_URI.length();
return getThemesHelper().extractValueFromString(uri, index, uri.length());
}
protected synchronized String createNewTheme(String originalUri, String encodedUri, boolean newTheme, boolean manuallyCreated) {
getThemesHelper().addUriToTheme(originalUri);
initTheme(newTheme);
String themeKey = theme.getId();
theme.setLinkToSkeleton(encodedUri);
theme.setLinkToBase(getThemesHelper().getLinkToBase(encodedUri));
theme.setLinkToBaseAsItIs(getThemesHelper().getLinkToBase(originalUri));
if (manuallyCreated) {
theme.setLoading(false);
}
if (addThemeInfo()) {
return themeKey;
}
return null;
}
private String getThemeId() {
String id = String.valueOf(getThemesHelper().getRandomNumber(Integer.MAX_VALUE));
while (getThemesHelper().getTheme(id) != null) { // Checking if exists Theme with the same ID
id = String.valueOf(getThemesHelper().getRandomNumber(Integer.MAX_VALUE));
}
return id;
}
private ThemesHelper getThemesHelper() {
if (helper == null) {
ELUtil.getInstance().autowire(this);
}
return helper;
}
}