189 lines
8.1 KiB
Java
189 lines
8.1 KiB
Java
package com.kallendorf.fsplugin.fsprotokolle;
|
|
|
|
import java.awt.Image;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.Calendar;
|
|
import java.util.NoSuchElementException;
|
|
|
|
import javax.imageio.ImageIO;
|
|
import javax.swing.Icon;
|
|
import javax.swing.ImageIcon;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import de.espirit.firstspirit.access.Language;
|
|
import de.espirit.firstspirit.access.editor.value.DefaultDomNode;
|
|
import de.espirit.firstspirit.access.editor.value.DomElement;
|
|
import de.espirit.firstspirit.access.editor.value.DomNode;
|
|
import de.espirit.firstspirit.access.editor.value.InvalidValueException;
|
|
import de.espirit.firstspirit.access.store.ElementDeletedException;
|
|
import de.espirit.firstspirit.access.store.ElementMovedException;
|
|
import de.espirit.firstspirit.access.store.LockException;
|
|
import de.espirit.firstspirit.access.store.Store;
|
|
import de.espirit.firstspirit.access.store.StoreElement;
|
|
import de.espirit.firstspirit.access.store.Store.Type;
|
|
import de.espirit.firstspirit.access.store.pagestore.Body;
|
|
import de.espirit.firstspirit.access.store.pagestore.Page;
|
|
import de.espirit.firstspirit.access.store.pagestore.Section;
|
|
import de.espirit.firstspirit.access.store.templatestore.FormatTemplate;
|
|
import de.espirit.firstspirit.access.store.templatestore.FormatTemplates;
|
|
import de.espirit.firstspirit.access.store.templatestore.LinkTemplate;
|
|
import de.espirit.firstspirit.access.store.templatestore.LinkTemplates;
|
|
import de.espirit.firstspirit.access.store.templatestore.SectionTemplate;
|
|
import de.espirit.firstspirit.access.store.templatestore.SectionTemplates;
|
|
import de.espirit.firstspirit.access.store.templatestore.TemplateStoreRoot;
|
|
import de.espirit.firstspirit.agency.LanguageAgent;
|
|
import de.espirit.firstspirit.agency.OperationAgent;
|
|
import de.espirit.firstspirit.agency.StoreAgent;
|
|
import de.espirit.firstspirit.client.access.link.LinkImpl;
|
|
import de.espirit.firstspirit.client.plugin.toolbar.ExecutableToolbarItem;
|
|
import de.espirit.firstspirit.client.plugin.toolbar.ToolbarContext;
|
|
import de.espirit.firstspirit.forms.FormData;
|
|
import de.espirit.firstspirit.forms.FormField;
|
|
import de.espirit.firstspirit.store.operations.ReleaseOperation;
|
|
import de.espirit.firstspirit.store.operations.SaveOperation;
|
|
|
|
public class FSProtokollMenuItem implements ExecutableToolbarItem {
|
|
|
|
/**
|
|
* @wbp.parser.entryPoint
|
|
*/
|
|
public FSProtokollMenuItem() {
|
|
}
|
|
|
|
public String getLabel(@NotNull final ToolbarContext context) {
|
|
return "PermissionViewPlugin";
|
|
}
|
|
|
|
public Icon getIcon(@NotNull final ToolbarContext context) {
|
|
// Credites to FontAwesome CC BY SA 4.0
|
|
InputStream is = FSProtokollPlugin.class.getResourceAsStream("/Scroll.png");
|
|
|
|
try {
|
|
return new ImageIcon(ImageIO.read(is).getScaledInstance(30, 24, Image.SCALE_SMOOTH));
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public Icon getPressedIcon(@NotNull final ToolbarContext context) {
|
|
return null;
|
|
}
|
|
|
|
public Icon getRollOverIcon(@NotNull final ToolbarContext context) {
|
|
return null;
|
|
}
|
|
|
|
public boolean isVisible(@NotNull final ToolbarContext context) {
|
|
return true;
|
|
}
|
|
|
|
public boolean isEnabled(@NotNull final ToolbarContext context) {
|
|
return true;
|
|
}
|
|
|
|
public void execute(@NotNull final ToolbarContext context) {
|
|
// get the applicationservice from servicesBroker
|
|
StoreAgent storeAgent = context.requestSpecialist(StoreAgent.TYPE);
|
|
Store pageStore = storeAgent.getStore(Type.PAGESTORE);
|
|
|
|
OperationAgent operationAgent = context.requireSpecialist(OperationAgent.TYPE);
|
|
SaveOperation saveOperation = operationAgent.getOperation(SaveOperation.TYPE);
|
|
saveOperation.setRecursionEnabled(true);
|
|
ReleaseOperation releaseOperation = operationAgent.getOperation(ReleaseOperation.TYPE);
|
|
releaseOperation.recursive(true);
|
|
releaseOperation.withComment("FSProtokoll Plugin on Tour");
|
|
|
|
int year = Calendar.getInstance().get(Calendar.YEAR);
|
|
Language language = context.requestSpecialist(LanguageAgent.TYPE).getMasterLanguage();
|
|
|
|
Page protokollseite = (Page) getChildByName(pageStore, "fsmathe", "fachschaft_responsiv",
|
|
"fachschaftsarbeit_1", "downloads___links_1", "fs_protokolle_1");
|
|
Body pageBody = (Body) getChildByName(protokollseite, "zentral");
|
|
|
|
try {
|
|
protokollseite.setLock(true, true);
|
|
|
|
// retrive Templates
|
|
final TemplateStoreRoot templateStore = (TemplateStoreRoot) context.requireSpecialist(StoreAgent.TYPE)
|
|
.getStore(Store.Type.TEMPLATESTORE);
|
|
|
|
final SectionTemplates sectionTemplates = templateStore.getSectionTemplates();
|
|
final SectionTemplate sectionTemplate = sectionTemplates.getTemplate("text@tud_vorlagen");
|
|
|
|
final FormatTemplates formatTemplates = templateStore.getFormatTemplates();
|
|
final FormatTemplate paragraphTemplate = formatTemplates.getFormatTemplate("p");
|
|
|
|
final LinkTemplates linkTemplates = templateStore.getLinkTemplates();
|
|
final LinkTemplate linkTemplate = linkTemplates.getTemplate("externerlink");
|
|
|
|
try {
|
|
final StoreElement oldSection = getChildByName(pageBody, "protokoll_" + year);
|
|
oldSection.setLock(true);
|
|
oldSection.delete();
|
|
pageBody.removeChild(oldSection);
|
|
pageBody.refresh();
|
|
} catch (NoSuchElementException e) {
|
|
// Nothing to do here
|
|
}
|
|
|
|
Section<SectionTemplate> section = pageBody.createSection("protokoll_" + year, sectionTemplate);
|
|
pageBody.moveChild(section, 1);
|
|
section.setDisplayName(language, String.valueOf(year));
|
|
section.includeInOutput(language);
|
|
FormData sectionFormData = section.getFormData();
|
|
|
|
sectionFormData.get(language, "st_ueberschrift").set(String.valueOf(year));
|
|
sectionFormData.get(language, "st_toggle").set(true);
|
|
sectionFormData.get(language, "st_ueberschrift_zeichen").set(4);
|
|
sectionFormData.get(language, "st_ueberschrift_ebene").set(2);
|
|
|
|
FormField<DomElement> editor = (FormField<DomElement>) sectionFormData.get(language, "st_text");
|
|
|
|
// get the dom element and rootNode of the editor value
|
|
final DomElement domElement = editor.get();
|
|
final DefaultDomNode rootDomNode = domElement.getRoot();
|
|
for (DomNode n : rootDomNode.getChildren()) {
|
|
rootDomNode.removeChild(n);
|
|
}
|
|
|
|
// append a paragraph by using the paragraphTemplate
|
|
String[] protokolle = FSProtokollHelper.getProtokollNamesCurrent();
|
|
for (int i = protokolle.length - 1; i >= 0; i--) {
|
|
String protokollName = protokolle[i];
|
|
final DefaultDomNode paragraph = (DefaultDomNode) rootDomNode.appendChild(paragraphTemplate);
|
|
final LinkImpl link = (LinkImpl) linkTemplate.createLink(language);
|
|
link.setAttribute("ref", FSProtokollHelper.getDownloadLink(protokollName));
|
|
link.setText(protokollName);
|
|
paragraph.appendChild(link);
|
|
}
|
|
editor.set(domElement);
|
|
section.setFormData(sectionFormData);
|
|
|
|
saveOperation.setRecursionEnabled(true);
|
|
saveOperation.setComment("FSProtokoll Plugin has fired.");
|
|
saveOperation.perform(protokollseite);
|
|
protokollseite.setLock(false, true);
|
|
|
|
releaseOperation.perform(protokollseite);
|
|
|
|
System.out.println("Ende");
|
|
} catch (InvalidValueException | LockException | ElementDeletedException | ElementMovedException e) {
|
|
e.printStackTrace();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
private StoreElement getChildByName(StoreElement rootNode, String... path) {
|
|
StoreElement node = rootNode;
|
|
for (String name : path) {
|
|
node = node.getChildren().toList().stream().filter(s -> s.getName().equals(name)).findFirst().get();
|
|
}
|
|
return node;
|
|
}
|
|
|
|
}
|