ParentGroupsResult.java
package sk.iway.iwcm.editor.rest;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.doc.GroupDetails;
import sk.iway.iwcm.doc.GroupsDB;
import sk.iway.iwcm.i18n.Prop;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import lombok.Getter;
import lombok.Setter;
/**
* Entita pre ziskani zoznamu parentov pre zadane docid/groupid pri volani /parents/{id} pre Groups a Webpages.
* Okrem ID parentov vrati aj domenove meno a pripadne kartu (Priecinky, System, Kos).
*/
@Getter
@Setter
public class ParentGroupsResult {
private boolean found;
private JsTreeTab tab;
private String domain;
private List<Integer> parents;
/**
* Metoda pre nastavenie typu Tabu z parent adresarov
* @param parentGroups List<GroupDetails>
* @return JsTreeTab
*/
private void setTabFromParentGroups(List<GroupDetails> parentGroups) {
final Prop propSystem = Prop.getInstance(Constants.getString("defaultLanguage"));
final String trashDirPath = propSystem.getText("config.trash_dir");
if (parentGroups.stream().anyMatch(p -> p.getFullPath().equals(trashDirPath))) {
setTab(JsTreeTab.TRASH);
return;
}
GroupDetails localSystemGroup = GroupsDB.getInstance().getLocalSystemGroup();
final int localSystemGroupId = localSystemGroup!=null ? localSystemGroup.getGroupId() : -1;
List<GroupDetails> parentGroupsChecked = new ArrayList<>();
for (GroupDetails p : parentGroups) {
if (p.getFullPath().equals("/System") || p.getGroupId()==localSystemGroupId) {
setTab(JsTreeTab.SYSTEM);
//remove other parent groups, if it's not root folder
if (parentGroupsChecked.size()!=parentGroups.size()) {
parentGroups.clear();
parentGroups.addAll(parentGroupsChecked);
}
return;
}
parentGroupsChecked.add(p);
}
setTab(JsTreeTab.FOLDER);
}
public void setParentGroups(GroupDetails group, List<GroupDetails> parentGroups) {
setFound(true);
// tab podla toho, v akych adresaroch sa nachadza
setTabFromParentGroups(parentGroups);
// vyfiltrovanie kosu a system adresaru z vysledku, kedze sa v JsTree nenachadza
if (Constants.getBoolean("templatesUseRecursiveSystemFolder")==false) parentGroups = filterSystemAndTrash(parentGroups);
// IDcka adresarov
parents = parentGroups.stream().map(GroupDetails::getGroupId).collect(Collectors.toList());
Collections.reverse(parents);
// domena z adresaru
setDomain(group.getDomainName());
}
public enum JsTreeTab {
FOLDER, SYSTEM, TRASH
}
/**
* Metoda pre vyfiltrovanie adresarov (System a Kos) zo zoznamu
* @param parentGroups List<GroupDetails>
* @return List<GroupDetails>
*/
private List<GroupDetails> filterSystemAndTrash(List<GroupDetails> parentGroups) {
final Prop propSystem = Prop.getInstance(Constants.getString("defaultLanguage"));
final String trashDirPath = propSystem.getText("config.trash_dir");
return parentGroups.stream().filter(p -> !p.getFullPath().equals(trashDirPath) && !p.getFullPath().equals("/System")).collect(Collectors.toList());
}
}