Fixed some bugs in the DbThemeProvider #12
|
|
@ -75,7 +75,7 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "DatabaseThemeProvider";
|
return "DatabaseThemeProvider";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getClassName() {
|
public String getClassName() {
|
||||||
return DatabaseThemeProvider.class.getName();
|
return DatabaseThemeProvider.class.getName();
|
||||||
|
|
@ -84,7 +84,6 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
@Override
|
@Override
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public List<ThemeInfo> getThemes() {
|
public List<ThemeInfo> getThemes() {
|
||||||
|
|
||||||
return themeRepository
|
return themeRepository
|
||||||
.findAll(ThemeVersion.DRAFT)
|
.findAll(ThemeVersion.DRAFT)
|
||||||
.stream()
|
.stream()
|
||||||
|
|
@ -95,7 +94,6 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ThemeInfo> getLiveThemes() {
|
public List<ThemeInfo> getLiveThemes() {
|
||||||
|
|
||||||
return themeRepository
|
return themeRepository
|
||||||
.findAll(ThemeVersion.LIVE)
|
.findAll(ThemeVersion.LIVE)
|
||||||
.stream()
|
.stream()
|
||||||
|
|
@ -105,18 +103,18 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ThemeInfo> getThemeInfo(final String themeName,
|
public Optional<ThemeInfo> getThemeInfo(
|
||||||
final ThemeVersion version) {
|
final String themeName, final ThemeVersion version
|
||||||
|
) {
|
||||||
return themeRepository
|
return themeRepository
|
||||||
.findThemeByName(themeName, version)
|
.findThemeByName(themeName, version)
|
||||||
.map(this::createThemeInfo);
|
.map(this::createThemeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean providesTheme(final String theme,
|
public boolean providesTheme(
|
||||||
final ThemeVersion version) {
|
final String theme, final ThemeVersion version
|
||||||
|
) {
|
||||||
return themeRepository
|
return themeRepository
|
||||||
.findThemeByName(theme, version)
|
.findThemeByName(theme, version)
|
||||||
.isPresent();
|
.isPresent();
|
||||||
|
|
@ -124,12 +122,12 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ThemeInfo createTheme(final String themeName) {
|
public ThemeInfo createTheme(final String themeName) {
|
||||||
|
|
||||||
Objects.requireNonNull(themeName);
|
Objects.requireNonNull(themeName);
|
||||||
|
|
||||||
if (themeName.isEmpty() || themeName.matches("\\s*")) {
|
if (themeName.isEmpty() || themeName.matches("\\s*")) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"The name of a theme can't be empty.");
|
"The name of a theme can't be empty."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Theme theme = themeManager.createTheme(themeName);
|
final Theme theme = themeManager.createTheme(themeName);
|
||||||
|
|
@ -139,7 +137,6 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteTheme(final String themeName) {
|
public void deleteTheme(final String themeName) {
|
||||||
|
|
||||||
Objects.requireNonNull(themeName);
|
Objects.requireNonNull(themeName);
|
||||||
|
|
||||||
if (themeName.isEmpty() || themeName.matches("\\s*")) {
|
if (themeName.isEmpty() || themeName.matches("\\s*")) {
|
||||||
|
|
@ -149,33 +146,38 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
final Theme theme = themeRepository
|
final Theme theme = themeRepository
|
||||||
.findThemeByName(themeName, ThemeVersion.DRAFT)
|
.findThemeByName(themeName, ThemeVersion.DRAFT)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String.format(
|
.orElseThrow(
|
||||||
"No theme with name \"%s\" is managed by this provider.",
|
() -> new IllegalArgumentException(
|
||||||
themeName)));
|
String.format(
|
||||||
|
"No theme with name \"%s\" is managed by this provider.",
|
||||||
|
themeName
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
themeManager.deleteTheme(theme);
|
themeManager.deleteTheme(theme);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ThemeFileInfo> listThemeFiles(final String themeName,
|
public List<ThemeFileInfo> listThemeFiles(
|
||||||
final ThemeVersion version,
|
final String themeName, final ThemeVersion version, final String path
|
||||||
final String path) {
|
) {
|
||||||
|
|
||||||
final Theme theme = themeRepository
|
final Theme theme = themeRepository
|
||||||
.findThemeByName(path, version)
|
.findThemeByName(path, version)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String
|
.orElseThrow(
|
||||||
.format("No Theme \"%s\" in the database.", themeName)));
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("No Theme \"%s\" in the database.", themeName)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
final Optional<ThemeFile> themeFile = fileRepository
|
final Optional<ThemeFile> themeFile = fileRepository.findByPath(
|
||||||
.findByPath(theme, path, version);
|
theme, path, version
|
||||||
|
);
|
||||||
|
|
||||||
final List<ThemeFileInfo> result = new ArrayList<>();
|
final List<ThemeFileInfo> result = new ArrayList<>();
|
||||||
if (themeFile.isPresent()) {
|
if (themeFile.isPresent()) {
|
||||||
if (themeFile.get() instanceof DataFile) {
|
if (themeFile.get() instanceof DataFile) {
|
||||||
|
|
||||||
result.add(themeFile.map(this::createThemeFileInfo).get());
|
result.add(themeFile.map(this::createThemeFileInfo).get());
|
||||||
|
|
||||||
} else if (themeFile.get() instanceof Directory) {
|
} else if (themeFile.get() instanceof Directory) {
|
||||||
|
|
||||||
final Directory directory = (Directory) themeFile.get();
|
final Directory directory = (Directory) themeFile.get();
|
||||||
result.addAll(directory
|
result.addAll(directory
|
||||||
.getFiles()
|
.getFiles()
|
||||||
|
|
@ -183,9 +185,12 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
.map(this::createThemeFileInfo)
|
.map(this::createThemeFileInfo)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String
|
throw new IllegalArgumentException(
|
||||||
.format("Unknown type \"%s\".",
|
String.format(
|
||||||
themeFile.get().getClass().getName()));
|
"Unknown type \"%s\".",
|
||||||
|
themeFile.get().getClass().getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -194,15 +199,16 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ThemeFileInfo> getThemeFileInfo(
|
public Optional<ThemeFileInfo> getThemeFileInfo(
|
||||||
final String themeName, final ThemeVersion version, final String path) {
|
final String themeName, final ThemeVersion version, final String path
|
||||||
|
) {
|
||||||
final Theme theme = themeRepository
|
final Theme theme = themeRepository
|
||||||
.findThemeByName(path, version)
|
.findThemeByName(path, version)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String
|
.orElseThrow(() -> new IllegalArgumentException(String
|
||||||
.format("No Theme \"%s\" in the database.", themeName)));
|
.format("No Theme \"%s\" in the database.", themeName)));
|
||||||
|
|
||||||
final Optional<ThemeFile> themeFile = fileRepository
|
final Optional<ThemeFile> themeFile = fileRepository.findByPath(
|
||||||
.findByPath(theme, path, version);
|
theme, path, version
|
||||||
|
);
|
||||||
|
|
||||||
if (themeFile.isPresent()) {
|
if (themeFile.isPresent()) {
|
||||||
return Optional.of(createThemeFileInfo(themeFile.get()));
|
return Optional.of(createThemeFileInfo(themeFile.get()));
|
||||||
|
|
@ -214,8 +220,8 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
@Override
|
@Override
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public Optional<InputStream> getThemeFileAsStream(
|
public Optional<InputStream> getThemeFileAsStream(
|
||||||
final String themeName, final ThemeVersion version, final String path) {
|
final String themeName, final ThemeVersion version, final String path
|
||||||
|
) {
|
||||||
final Optional<Theme> theme = themeRepository
|
final Optional<Theme> theme = themeRepository
|
||||||
.findThemeByName(themeName, version);
|
.findThemeByName(themeName, version);
|
||||||
|
|
||||||
|
|
@ -224,11 +230,11 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
.findByPath(theme.get(), path, version);
|
.findByPath(theme.get(), path, version);
|
||||||
if (file.isPresent()) {
|
if (file.isPresent()) {
|
||||||
if (file.get() instanceof DataFile) {
|
if (file.get() instanceof DataFile) {
|
||||||
|
|
||||||
final DataFile dataFile = (DataFile) file.get();
|
final DataFile dataFile = (DataFile) file.get();
|
||||||
|
|
||||||
final byte[] data = Arrays
|
final byte[] data = Arrays.copyOf(
|
||||||
.copyOf(dataFile.getData(), dataFile.getData().length);
|
dataFile.getData(), dataFile.getData().length
|
||||||
|
);
|
||||||
|
|
||||||
return Optional.of(new ByteArrayInputStream(data));
|
return Optional.of(new ByteArrayInputStream(data));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -244,9 +250,9 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public OutputStream getOutputStreamForThemeFile(final String themeName,
|
public OutputStream getOutputStreamForThemeFile(
|
||||||
final String path) {
|
final String themeName, final String path
|
||||||
|
) {
|
||||||
Objects.requireNonNull(themeName);
|
Objects.requireNonNull(themeName);
|
||||||
Objects.requireNonNull(path);
|
Objects.requireNonNull(path);
|
||||||
|
|
||||||
|
|
@ -260,8 +266,11 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
final Theme theme = themeRepository
|
final Theme theme = themeRepository
|
||||||
.findThemeByName(path, ThemeVersion.DRAFT)
|
.findThemeByName(path, ThemeVersion.DRAFT)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String
|
.orElseThrow(
|
||||||
.format("Theme \"%s\" does not exist.", themeName)));
|
() -> new IllegalArgumentException(
|
||||||
|
String.format("Theme \"%s\" does not exist.", themeName)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
final ThemeFile file = fileRepository
|
final ThemeFile file = fileRepository
|
||||||
.findByPath(theme, path, ThemeVersion.DRAFT)
|
.findByPath(theme, path, ThemeVersion.DRAFT)
|
||||||
|
|
@ -270,15 +279,18 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
if (file instanceof DataFile) {
|
if (file instanceof DataFile) {
|
||||||
return new DataFileOutputStream((DataFile) file);
|
return new DataFileOutputStream((DataFile) file);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String
|
throw new IllegalArgumentException(
|
||||||
.format("The path \"%s\" does not point to a DataFile.",
|
String.format(
|
||||||
path));
|
"The path \"%s\" does not point to a DataFile.",
|
||||||
|
path
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataFile createDataFile(final Theme theme,
|
private DataFile createDataFile(
|
||||||
final String path) {
|
final Theme theme, final String path
|
||||||
|
) {
|
||||||
final int lastSlashIndex = path.lastIndexOf('/');
|
final int lastSlashIndex = path.lastIndexOf('/');
|
||||||
final String parentPath = path.substring(0, lastSlashIndex);
|
final String parentPath = path.substring(0, lastSlashIndex);
|
||||||
|
|
||||||
|
|
@ -287,12 +299,16 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
"Path \"%s\" does not point to a file.", path));
|
"Path \"%s\" does not point to a file.", path));
|
||||||
}
|
}
|
||||||
|
|
||||||
final ThemeFile parent = fileRepository.findByPath(theme,
|
final ThemeFile parent = fileRepository
|
||||||
path,
|
.findByPath(theme, path, ThemeVersion.DRAFT)
|
||||||
ThemeVersion.DRAFT)
|
.orElseThrow(
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String
|
() -> new IllegalArgumentException(
|
||||||
.format("The path \"%s\" does not point to a directory.",
|
String.format(
|
||||||
path)));
|
"The path \"%s\" does not point to a directory.",
|
||||||
|
path
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
if (parent instanceof Directory) {
|
if (parent instanceof Directory) {
|
||||||
final Directory parentDirectory = (Directory) parent;
|
final Directory parentDirectory = (Directory) parent;
|
||||||
|
|
@ -308,7 +324,6 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteThemeFile(final String themeName, final String path) {
|
public void deleteThemeFile(final String themeName, final String path) {
|
||||||
|
|
||||||
Objects.requireNonNull(themeName);
|
Objects.requireNonNull(themeName);
|
||||||
Objects.requireNonNull(path);
|
Objects.requireNonNull(path);
|
||||||
|
|
||||||
|
|
@ -348,7 +363,6 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void publishTheme(final String themeName) {
|
public void publishTheme(final String themeName) {
|
||||||
|
|
||||||
themeRepository
|
themeRepository
|
||||||
.findThemeByName(themeName, ThemeVersion.DRAFT)
|
.findThemeByName(themeName, ThemeVersion.DRAFT)
|
||||||
.ifPresent(themeManager::publishTheme);
|
.ifPresent(themeManager::publishTheme);
|
||||||
|
|
@ -363,15 +377,16 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ThemeInfo createThemeInfo(final Theme theme) {
|
private ThemeInfo createThemeInfo(final Theme theme) {
|
||||||
|
|
||||||
Objects.requireNonNull(theme);
|
Objects.requireNonNull(theme);
|
||||||
|
|
||||||
final Optional<ThemeFile> manifestFileJson = fileRepository
|
final Optional<ThemeFile> manifestFileJson = fileRepository
|
||||||
.findByNameAndParent(ThemeConstants.THEME_MANIFEST_JSON,
|
.findByNameAndParent(
|
||||||
theme.getRootDirectory());
|
ThemeConstants.THEME_MANIFEST_JSON, theme.getRootDirectory()
|
||||||
|
);
|
||||||
final Optional<ThemeFile> manifestFileXml = fileRepository
|
final Optional<ThemeFile> manifestFileXml = fileRepository
|
||||||
.findByNameAndParent(ThemeConstants.THEME_MANIFEST_XML,
|
.findByNameAndParent(
|
||||||
theme.getRootDirectory());
|
ThemeConstants.THEME_MANIFEST_XML, theme.getRootDirectory()
|
||||||
|
);
|
||||||
|
|
||||||
final DataFile manifestFile;
|
final DataFile manifestFile;
|
||||||
final String filename;
|
final String filename;
|
||||||
|
|
@ -382,9 +397,11 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
manifestFile = (DataFile) manifestFileXml.get();
|
manifestFile = (DataFile) manifestFileXml.get();
|
||||||
filename = ThemeConstants.THEME_MANIFEST_XML;
|
filename = ThemeConstants.THEME_MANIFEST_XML;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String
|
throw new IllegalArgumentException(
|
||||||
.format("No manifest file found for theme \"%s\".",
|
String.format(
|
||||||
theme.getName()));
|
"No manifest file found for theme \"%s\".", theme.getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
try (final InputStream inputStream = new ByteArrayInputStream(
|
try (final InputStream inputStream = new ByteArrayInputStream(
|
||||||
|
|
@ -393,7 +410,7 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
.loadManifest(inputStream, filename);
|
.loadManifest(inputStream, filename);
|
||||||
final ThemeInfo themeInfo = new ThemeInfo();
|
final ThemeInfo themeInfo = new ThemeInfo();
|
||||||
themeInfo.setManifest(manifest);
|
themeInfo.setManifest(manifest);
|
||||||
themeInfo.setProvider(getClass());
|
themeInfo.setProvider(DatabaseThemeProvider.class);
|
||||||
themeInfo.setVersion(theme.getVersion());
|
themeInfo.setVersion(theme.getVersion());
|
||||||
|
|
||||||
return themeInfo;
|
return themeInfo;
|
||||||
|
|
@ -403,7 +420,6 @@ public class DatabaseThemeProvider implements ThemeProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ThemeFileInfo createThemeFileInfo(final ThemeFile file) {
|
private ThemeFileInfo createThemeFileInfo(final ThemeFile file) {
|
||||||
|
|
||||||
final ThemeFileInfo fileInfo = new ThemeFileInfo();
|
final ThemeFileInfo fileInfo = new ThemeFileInfo();
|
||||||
|
|
||||||
fileInfo.setName(file.getName());
|
fileInfo.setName(file.getName());
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import org.libreccm.core.CoreConstants;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
|
|
@ -31,7 +32,7 @@ import javax.persistence.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Directory in the file structure of a theme stored in the database.
|
* Directory in the file structure of a theme stored in the database.
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
@Entity
|
@Entity
|
||||||
|
|
@ -39,24 +40,42 @@ import javax.persistence.Table;
|
||||||
public class Directory extends ThemeFile {
|
public class Directory extends ThemeFile {
|
||||||
|
|
||||||
private static final long serialVersionUID = 3553722448470575337L;
|
private static final long serialVersionUID = 3553722448470575337L;
|
||||||
|
|
||||||
@OneToMany(mappedBy = "parent")
|
@OneToMany(mappedBy = "parent")
|
||||||
@OrderBy("name ASC")
|
@OrderBy("name ASC")
|
||||||
private List<ThemeFile> files;
|
private List<ThemeFile> files;
|
||||||
|
|
||||||
|
public Directory() {
|
||||||
|
super();
|
||||||
|
files = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
public List<ThemeFile> getFiles() {
|
public List<ThemeFile> getFiles() {
|
||||||
return Collections.unmodifiableList(files);
|
return Optional
|
||||||
|
.ofNullable(files)
|
||||||
|
.map(Collections::unmodifiableList)
|
||||||
|
.orElse(Collections.emptyList());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setFiles(final List<ThemeFile> files) {
|
protected void setFiles(final List<ThemeFile> files) {
|
||||||
this.files = new ArrayList<>(files);
|
if (files == null) {
|
||||||
|
this.files = null;
|
||||||
|
} else {
|
||||||
|
this.files = new ArrayList<>(files);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addFile(final ThemeFile file) {
|
protected void addFile(final ThemeFile file) {
|
||||||
|
if (files == null) {
|
||||||
|
files = new ArrayList<>();
|
||||||
|
}
|
||||||
files.add(file);
|
files.add(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeFile(final ThemeFile file) {
|
protected void removeFile(final ThemeFile file) {
|
||||||
|
if (files == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
files.remove(file);
|
files.remove(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -84,10 +103,10 @@ public class Directory extends ThemeFile {
|
||||||
final Directory other = (Directory) obj;
|
final Directory other = (Directory) obj;
|
||||||
return other.canEqual(this);
|
return other.canEqual(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canEqual(final Object other) {
|
public boolean canEqual(final Object other) {
|
||||||
return other instanceof Directory;
|
return other instanceof Directory;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,18 +78,24 @@ public class ThemeManager {
|
||||||
root.setName(name);
|
root.setName(name);
|
||||||
root.setPath("/");
|
root.setPath("/");
|
||||||
root.setTheme(theme);
|
root.setTheme(theme);
|
||||||
|
theme.setRootDirectory(root);
|
||||||
|
|
||||||
final ThemeManifest manifest = new ThemeManifest();
|
final ThemeManifest manifest = new ThemeManifest();
|
||||||
manifest.setName(name);
|
manifest.setName(name);
|
||||||
|
|
||||||
final DataFile manifestFile = new DataFile();
|
final DataFile manifestFile = new DataFile();
|
||||||
manifestFile.setName(ThemeConstants.THEME_MANIFEST_JSON);
|
manifestFile.setName(ThemeConstants.THEME_MANIFEST_JSON);
|
||||||
manifestFile.setPath(String.format("/%s",
|
manifestFile.setPath(
|
||||||
ThemeConstants.THEME_MANIFEST_JSON));
|
String.format(
|
||||||
|
"/%s", ThemeConstants.THEME_MANIFEST_JSON
|
||||||
|
)
|
||||||
|
);
|
||||||
manifestFile.setTheme(theme);
|
manifestFile.setTheme(theme);
|
||||||
|
manifestFile.setParent(root);
|
||||||
|
|
||||||
final String manifestData = manifestUtil
|
final String manifestData = manifestUtil.serializeManifest(
|
||||||
.serializeManifest(manifest, ThemeConstants.THEME_MANIFEST_JSON);
|
manifest, ThemeConstants.THEME_MANIFEST_JSON
|
||||||
|
);
|
||||||
manifestFile.setData(manifestData.getBytes());
|
manifestFile.setData(manifestData.getBytes());
|
||||||
root.addFile(manifestFile);
|
root.addFile(manifestFile);
|
||||||
|
|
||||||
|
|
@ -112,9 +118,12 @@ public class ThemeManager {
|
||||||
Objects.requireNonNull(theme);
|
Objects.requireNonNull(theme);
|
||||||
|
|
||||||
if (isLive(theme)) {
|
if (isLive(theme)) {
|
||||||
throw new IllegalArgumentException(String
|
throw new IllegalArgumentException(
|
||||||
.format("The theme \"%s\" is live and can't be deleted.",
|
String.format(
|
||||||
theme.getName()));
|
"The theme \"%s\" is live and can't be deleted.",
|
||||||
|
theme.getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
themeRepository.delete(theme);
|
themeRepository.delete(theme);
|
||||||
|
|
@ -148,9 +157,14 @@ public class ThemeManager {
|
||||||
} else {
|
} else {
|
||||||
return themeRepository
|
return themeRepository
|
||||||
.findThemeByUuid(theme.getUuid(), ThemeVersion.DRAFT)
|
.findThemeByUuid(theme.getUuid(), ThemeVersion.DRAFT)
|
||||||
.orElseThrow(() -> new IllegalArgumentException(String
|
.orElseThrow(
|
||||||
.format("No draft theme with UUID \"%s\" in the database.",
|
() -> new IllegalArgumentException(
|
||||||
theme.getUuid())));
|
String.format(
|
||||||
|
"No draft theme with UUID \"%s\" in the database.",
|
||||||
|
theme.getUuid()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -166,7 +180,6 @@ public class ThemeManager {
|
||||||
*/
|
*/
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public Optional<Theme> getLiveTheme(final Theme theme) {
|
public Optional<Theme> getLiveTheme(final Theme theme) {
|
||||||
|
|
||||||
Objects.requireNonNull(theme);
|
Objects.requireNonNull(theme);
|
||||||
|
|
||||||
return themeRepository
|
return themeRepository
|
||||||
|
|
@ -185,7 +198,6 @@ public class ThemeManager {
|
||||||
@RequiresPrivilege(ThemingPrivileges.ADMINISTER_THEMES)
|
@RequiresPrivilege(ThemingPrivileges.ADMINISTER_THEMES)
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public void publishTheme(final Theme theme) {
|
public void publishTheme(final Theme theme) {
|
||||||
|
|
||||||
Objects.requireNonNull(theme);
|
Objects.requireNonNull(theme);
|
||||||
|
|
||||||
final Theme draftTheme;
|
final Theme draftTheme;
|
||||||
|
|
@ -222,10 +234,11 @@ public class ThemeManager {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void publishFile(final Theme liveTheme,
|
private void publishFile(
|
||||||
final Directory liveParent,
|
final Theme liveTheme,
|
||||||
final ThemeFile draftFile) {
|
final Directory liveParent,
|
||||||
|
final ThemeFile draftFile
|
||||||
|
) {
|
||||||
Objects.requireNonNull(liveParent);
|
Objects.requireNonNull(liveParent);
|
||||||
Objects.requireNonNull(draftFile);
|
Objects.requireNonNull(draftFile);
|
||||||
|
|
||||||
|
|
@ -238,7 +251,6 @@ public class ThemeManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (draftFile instanceof Directory) {
|
if (draftFile instanceof Directory) {
|
||||||
|
|
||||||
final Directory draftDirectory = (Directory) draftFile;
|
final Directory draftDirectory = (Directory) draftFile;
|
||||||
|
|
||||||
final Directory liveDirectory = new Directory();
|
final Directory liveDirectory = new Directory();
|
||||||
|
|
@ -256,7 +268,6 @@ public class ThemeManager {
|
||||||
.forEach(file -> publishFile(liveTheme, liveDirectory, file));
|
.forEach(file -> publishFile(liveTheme, liveDirectory, file));
|
||||||
|
|
||||||
} else if (draftFile instanceof DataFile) {
|
} else if (draftFile instanceof DataFile) {
|
||||||
|
|
||||||
final DataFile draftDataFile = (DataFile) draftFile;
|
final DataFile draftDataFile = (DataFile) draftFile;
|
||||||
|
|
||||||
final DataFile liveDataFile = new DataFile();
|
final DataFile liveDataFile = new DataFile();
|
||||||
|
|
@ -289,7 +300,6 @@ public class ThemeManager {
|
||||||
@RequiresPrivilege(ThemingPrivileges.ADMINISTER_THEMES)
|
@RequiresPrivilege(ThemingPrivileges.ADMINISTER_THEMES)
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public void unpublishTheme(final Theme theme) {
|
public void unpublishTheme(final Theme theme) {
|
||||||
|
|
||||||
Objects.requireNonNull(theme);
|
Objects.requireNonNull(theme);
|
||||||
|
|
||||||
if (!isLive(theme)) {
|
if (!isLive(theme)) {
|
||||||
|
|
@ -321,9 +331,12 @@ public class ThemeManager {
|
||||||
.forEach(file -> unpublishFile(file));
|
.forEach(file -> unpublishFile(file));
|
||||||
themeFileRepository.delete(themeFile);
|
themeFileRepository.delete(themeFile);
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException(String
|
throw new IllegalArgumentException(
|
||||||
.format("Don't know how handle file type \"%s\".",
|
String.format(
|
||||||
themeFile.getClass().getName()));
|
"Don't know how handle file type \"%s\".",
|
||||||
|
themeFile.getClass().getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue