256: Workspace explorer

Task-Url: https://support.d4science.org/issues/256

Fixed breadcrumbs
Added user full name and pom dependency

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-explorer@115683 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-06-30 12:52:40 +00:00
parent fffde66498
commit 65a2f0da41
11 changed files with 268 additions and 141 deletions

View File

@ -110,6 +110,12 @@
</exclusions>
</dependency>
<dependency>
<groupId>org.gcube.dvos</groupId>
<artifactId>usermanagement-core</artifactId>
<scope>provided</scope>
</dependency>
<!-- LOGGER -->
<dependency>
<groupId>log4j</groupId>
@ -131,6 +137,8 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<resources>

View File

@ -17,8 +17,10 @@ import org.gcube.portlets.widgets.wsexplorer.client.view.Breadcrumbs;
import org.gcube.portlets.widgets.wsexplorer.client.view.Navigation;
import org.gcube.portlets.widgets.wsexplorer.client.view.WorkspaceExplorer;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import com.github.gwtbootstrap.client.ui.constants.AlertType;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.HandlerManager;
@ -50,9 +52,9 @@ public class WorkspaceExplorerController implements EventHandler {
workspaceExplorerPanel = new WorkspaceExplorerPanel(5, wsExplorer.getPanel(), breadcrumbs, navigation);
}
public void loadRoot(){
wsExplorer.loadRoot();
}
// public void loadRoot(){
// wsExplorer.loadRoot();
// }
/**
* Bind events.
@ -76,7 +78,22 @@ public class WorkspaceExplorerController implements EventHandler {
@Override
public void onLoadRoot(LoadRootEvent loadRootEvent) {
wsExplorer.loadRoot();
breadcrumbs.init();
workspaceNavigatorService.getItemByCategory(ItemCategory.HOME, new AsyncCallback<Item>() {
@Override
public void onFailure(Throwable caught) {
GWT.log(caught.getMessage());
breadcrumbs.clear();
}
@Override
public void onSuccess(Item result) {
result.setName(WorkspaceExplorerConstants.HOME_LABEL); //FORCE SET NAME LIKE "HOME_LABEL"
breadcrumbs.init(result);
}
});
}
});
@ -85,7 +102,19 @@ public class WorkspaceExplorerController implements EventHandler {
@Override
public void onLoadMySpecialFolder(LoadMySpecialFolderEvent loadMySpecialFolderEvent) {
wsExplorer.loadMySpecialFolder();
breadcrumbs.init();
workspaceNavigatorService.getItemByCategory(ItemCategory.VRE_FOLDER, new AsyncCallback<Item>() {
@Override
public void onFailure(Throwable caught) {
GWT.log(caught.getMessage());
}
@Override
public void onSuccess(Item result) {
breadcrumbs.init(result);
}
});
}
});
}
@ -100,12 +129,12 @@ public class WorkspaceExplorerController implements EventHandler {
GWT.log("Reload Parent Breadcrumb: [Item id: "+itemIdentifier+"]");
workspaceNavigatorService.getListParentsByItemIdentifier(itemIdentifier, includeItemAsParent, new AsyncCallback<List<Item>>() {
workspaceNavigatorService.getBreadcrumbsByItemIdentifier(itemIdentifier, includeItemAsParent, new AsyncCallback<List<Item>>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
GWT.log(caught.getMessage());
wsExplorer.setAlert(caught.getMessage(), AlertType.ERROR);
}
@Override

View File

@ -18,7 +18,7 @@ public class WorkspaceExplorerPanel extends DockPanel{
public int width = 550;
public int height = 400;
public int west_width = 130;
public int west_width = 150;
private ScrollPanel westPanel = new ScrollPanel();
private ScrollPanel centerScrollable = new ScrollPanel();

View File

@ -8,6 +8,7 @@ import java.util.List;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants;
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerController;
import org.gcube.portlets.widgets.wsexplorer.client.event.LoadRootEvent;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.HasWorskpaceExplorerNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorskpaceExplorerNotification.WorskpaceExplorerNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
@ -23,17 +24,18 @@ import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
/**
* The Class WorkspaceExplorerLoadDialog.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 29, 2015
*
*
* Jun 30, 2015
*/
public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceExplorerNotificationListener{
public static final String SELECT = "Select";
public static final String MAX_HEIGHT_DIALOG = "500px";
public static final int WIDHT_DIALOG = 720;
private Button selectButton;
private WorkspaceExplorerLoadDialog INSTANCE = this;
private boolean isSelect = false;
@ -42,15 +44,61 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx
private WorkspaceExplorerController controller = new WorkspaceExplorerController();
private List<WorskpaceExplorerNotificationListener> listeners = new ArrayList<WorskpaceExplorerNotificationListener>();
/**
* Instantiates a new worspace navigator dialog.
* Instantiates a new workspace explorer load dialog.
*
* @param captionTxt sets the text inside the caption, if null sets "Workspace Explorer"
*
* Add {@link WorskpaceExplorerNotificationListener} to receive events
* @param captionTxt the caption txt
* You can implement {@link WorskpaceExplorerNotificationListener} to receive events
*/
public WorkspaceExplorerLoadDialog(String captionTxt) {
controller.loadRoot();
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
/**
* Instantiates a new workspace explorer load dialog.
*
* @param captionTxt the caption txt
* @param showOnlyFolders the show only folders
*/
public WorkspaceExplorerLoadDialog(String captionTxt, boolean showOnlyFolders) {
if(showOnlyFolders){
ItemType[] itemsType = new ItemType[2];
itemsType[0] = ItemType.ROOT;
itemsType[1] = ItemType.FOLDER;
setSelectableTypes(itemsType);
setShowableTypes(itemsType);
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
/**
* Instantiates a new workspace explorer load dialog.
*
* @param captionTxt captionTxt sets the text inside the caption, if null sets "Workspace Explorer"
* @param selectableTypes the selectable types
* @param showableTypes the showable types
*
* You can implement {@link WorskpaceExplorerNotificationListener} to receive events
*/
public WorkspaceExplorerLoadDialog(String captionTxt, List<ItemType> selectableTypes, List<ItemType> showableTypes) {
if(selectableTypes!=null){
ItemType[] itemsType = new ItemType[selectableTypes.size()];
itemsType = selectableTypes.toArray(itemsType);
setSelectableTypes(selectableTypes.toArray(itemsType));
}
if(showableTypes!=null){
ItemType[] itemsType = new ItemType[showableTypes.size()];
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
WorkspaceExplorerController.eventBus.fireEvent(new LoadRootEvent());
initDialog(captionTxt);
}
@ -65,11 +113,10 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx
setAnimation(false);
setCloseVisible(true);
setTitle(this.captionTxt);
selectButton = new Button("Select");
selectButton = new Button(SELECT);
selectButton.setType(ButtonType.PRIMARY);
setWidth(710);
// setHeight("650px");
setMaxHeigth("500px");
setWidth(WIDHT_DIALOG);
setMaxHeigth(MAX_HEIGHT_DIALOG);
hide(false);
addHideHandler(new HideHandler() {
@ -80,41 +127,8 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx
notifyAborted();
}
});
// DockPanel dock = new DockPanel();
// dock.setSpacing(5);
// dock.add(okButton, DockPanel.SOUTH);
// dock.add(cancel, DockPanel.SOUTH);
// HorizontalPanel hp = new HorizontalPanel();
// hp.setStyleName("margin-auto");
////// hp.add(okButton);
//// hp.setWidth("50%");
//// hp.setStyleAttribute("margin", "0 auto");
// hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
// cancel.getElement().getStyle().setMarginTop(5.0, Unit.PX);
//// cancel.getElement().getStyle().setMarginBottom(5.0, Unit.PX);
//// hp.getElement().getStyle().setMarginLeft("0 auto", Unit.PCT);
// hp.add(cancel);
// dock.add(hp, DockPanel.SOUTH);
//
// dock.add(controller.getWorkspaceExplorerPanel(), DockPanel.CENTER);
//
// dock.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
// dock.setWidth("100%");
add(controller.getWorkspaceExplorerPanel());
// okButton.addClickHandler(new ClickHandler() {
//
// @Override
// public void onClick(ClickEvent event) {
//
// }
// });
selectButton.addClickHandler(new ClickHandler() {
@Override
@ -131,37 +145,7 @@ public class WorkspaceExplorerLoadDialog extends Modal implements HasWorskpaceEx
});
footer.add(selectButton);
add(footer);
}
/**
* Instantiates a new workspace explorer load dialog.
*
* @param captionTxt captionTxt sets the text inside the caption, if null sets "Workspace Explorer"
* @param selectableTypes the selectable types
* @param showableTypes the showable types
*
* Add {@link WorskpaceExplorerNotificationListener} to receive events
*/
public WorkspaceExplorerLoadDialog(String captionTxt, List<ItemType> selectableTypes, List<ItemType> showableTypes) {
if(selectableTypes!=null){
ItemType[] itemsType = new ItemType[selectableTypes.size()];
itemsType = selectableTypes.toArray(itemsType);
setSelectableTypes(selectableTypes.toArray(itemsType));
}
if(showableTypes!=null){
ItemType[] itemsType = new ItemType[showableTypes.size()];
itemsType = showableTypes.toArray(itemsType);
setShowableTypes(showableTypes.toArray(itemsType));
}
controller.loadRoot();
initDialog(captionTxt);
}
/**
* Notify selected item.

View File

@ -23,7 +23,7 @@ public interface WorkspaceExplorerService extends RemoteService {
* @return
* @throws Exception
*/
List<Item> getListParentsByItemIdentifier(String itemIdentifier,
List<Item> getBreadcrumbsByItemIdentifier(String itemIdentifier,
boolean includeItemAsParent) throws Exception;
/**

View File

@ -66,15 +66,16 @@ public interface WorkspaceExplorerServiceAsync {
boolean purgeEmpyFolders, FilterCriteria filterCriteria,
AsyncCallback<Item> callback);
/**
* Gets the list parents by item identifier.
* Gets the breadcrumbs by item identifier.
*
* @param itemIdentifier the item identifier
* @param includeItemAsParent the include item as parent
* @param asyncCallback the callback
* @return the list parents by item identifier
* @param asyncCallback the async callback
* @return the breadcrumbs by item identifier
*/
public void getListParentsByItemIdentifier(String itemIdentifier,
public void getBreadcrumbsByItemIdentifier(String itemIdentifier,
boolean includeItemAsParent, AsyncCallback<List<Item>> asyncCallback);
/**

View File

@ -45,14 +45,11 @@ public class Breadcrumbs extends Composite {
/**
* Instantiates a new breadcrumbs.
*
* @param rootName
* the root name
*/
public Breadcrumbs() {
initWidget(uiBinder.createAndBindUi(this));
breadcrumbs.setDivider(DIVIDER);
init();
// init();
// initBreadcrumb(true);
this.addStyleName("breadcrumbs-navigator");
}
@ -66,18 +63,27 @@ public class Breadcrumbs extends Composite {
public void setPath(List<Item> parents) {
resetBreadcrumbs();
if (parents != null && parents.size() > 0) {
hashListItems = new LinkedHashMap<String, Item>();
for (Item parent : parents) {
// if(!isRootOrSpecialFolder(parent)){ //SKIP ROOT AND SPECIAL FOLDER
// addNavigationLink(parent);
// hashListItems.put(parent.getId(), parent);
// }
if(!isRootOrSpecialFolder(parent)){ //SKIP ROOT AND SPECIAL FOLDER
// if(!isRootOrSpecialFolder(parent)){ //SKIP ROOT AND SPECIAL FOLDER
addNavigationLink(parent);
hashListItems.put(parent.getId(), parent);
}
// }
}
lastParent = parents.get(parents.size() - 1);
}
}
/**
* Checks if is root or special folder.
*
* @param item the item
* @return true, if is root or special folder
*/
private boolean isRootOrSpecialFolder(Item item){
GWT.log(item.getName() +" is root "+(item.getParent()==null));
GWT.log(item.getName() +" is special folder "+item.isSpecialFolder());
@ -89,35 +95,29 @@ public class Breadcrumbs extends Composite {
*/
private void resetBreadcrumbs() {
breadcrumbs.clear();
hashListItems.clear();
}
// @UiHandler("add")
/**
* Adds the navigation link.
*
* @param parent
* the parent
* @param parent the parent
*/
public void addNavigationLink(Item parent) {
// if (parent != null && parent.getParent() != null && !parent.isSpecialFolder() && !parent.getParent().isSpecialFolder()) {
final NavLink navLink = new NavLink(parent.getName());
navLink.setName(parent.getId());
breadcrumbs.add(navLink);
private void addNavigationLink(Item parent) {
final NavLink navLink = new NavLink(parent.getName());
navLink.setName(parent.getId());
breadcrumbs.add(navLink);
navLink.addClickHandler(new ClickHandler() {
navLink.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@Override
public void onClick(ClickEvent event) {
Item target = hashListItems.get(navLink.getName());
WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target));
}
});
// } else { //IS ROOT OR SPECIAL FOLDER
// // final NavLink navLink = new NavLink("");
// NavLink navLink = new NavLink("");
// breadcrumbs.add(navLink);// INIT
// }
Item target = hashListItems.get(navLink.getName());
WorkspaceExplorerController.eventBus.fireEvent(new LoadFolderEvent(target));
}
});
}
/**
@ -142,12 +142,23 @@ public class Breadcrumbs extends Composite {
return lastParent;
}
/**
*
* Inits the.
*
* @param item the item
*/
public void init() {
public void init(Item item) {
resetBreadcrumbs();
breadcrumbs.add(new NavLink("/"));
addNavigationLink(item);
hashListItems.put(item.getId(), item);
}
/**
* Clear.
*/
public void clear() {
resetBreadcrumbs();
}
}

View File

@ -75,7 +75,7 @@ public class WorkspaceExplorer implements ShowableTypes, SelectableTypes{
}
protected void setAlert(String html, AlertType type){
public void setAlert(String html, AlertType type){
explorerPanel.clear();
alert.setHTML(html);
alert.setType(type);

View File

@ -89,7 +89,7 @@ public class ItemBuilder {
itemName = "My VRE Folders";
}
Item item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItem.getPath(), workspaceItem.getOwner().getPortalLogin(), workspaceItem.isFolder());
Item item = new Item(parent, workspaceItem.getId(), itemName, type, workspaceItem.getPath(), UserUtil.getUserFullName(workspaceItem.getOwner().getPortalLogin()), workspaceItem.isFolder());
item.setSharedFolder(workspaceItem.getType()==WorkspaceItemType.SHARED_FOLDER);
/*
@ -146,9 +146,7 @@ public class ItemBuilder {
* @param item the item
* @return the folder item type
*/
protected static ItemType getFolderItemType(FolderItem item)
{
//System.out.println("getFolderItemType "+item.getFolderItemType().toString());
protected static ItemType getFolderItemType(FolderItem item){
return ItemType.valueOf(item.getFolderItemType().toString());
}
@ -161,8 +159,7 @@ public class ItemBuilder {
* @return true, if successful
* @throws InternalErrorException the internal error exception
*/
protected static boolean filterItem(ItemType type, WorkspaceItem item, FilterCriteria filterCriteria) throws InternalErrorException
{
protected static boolean filterItem(ItemType type, WorkspaceItem item, FilterCriteria filterCriteria) throws InternalErrorException {
boolean mimeTypeCheck = checkAllowedMimeTypes(type, item, filterCriteria.getAllowedMimeTypes());
if (!mimeTypeCheck) return false;
@ -178,8 +175,7 @@ public class ItemBuilder {
* @param allowedMimeTypes the allowed mime types
* @return true, if successful
*/
protected static boolean checkAllowedMimeTypes(ItemType type, WorkspaceItem item, List<String> allowedMimeTypes)
{
protected static boolean checkAllowedMimeTypes(ItemType type, WorkspaceItem item, List<String> allowedMimeTypes){
if (allowedMimeTypes.size()==0) return true;
if (type == ItemType.EXTERNAL_FILE || type == ItemType.EXTERNAL_IMAGE || type == ItemType.EXTERNAL_PDF_FILE) {
@ -228,8 +224,10 @@ public class ItemBuilder {
String name = "";
boolean isSpecialFolder = false;
//MANAGEMENT SHARED FOLDER NAME
if(wsFolder.isShared() && wsFolder.getType().equals(WorkspaceItemType.SHARED_FOLDER)){
if(wsFolder.isRoot()){ //IS ROOT
name = WorkspaceExplorerConstants.HOME_LABEL;
}else if(wsFolder.isShared() && wsFolder.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ //MANAGEMENT SHARED FOLDER NAME
WorkspaceSharedFolder shared = (WorkspaceSharedFolder) wsFolder;
name = shared.isVreFolder()?shared.getDisplayName():wsFolder.getName();
//MANAGEMENT SPECIAL FOLDER
@ -238,8 +236,9 @@ public class ItemBuilder {
isSpecialFolder = true;
}else
name = wsFolder.getName();
Item item = new Item(null, wsFolder.getId(), name, ItemType.FOLDER, "", wsFolder.getOwner().getPortalLogin(), wsFolder.isFolder());
//BUILDS A SIMPLE ITEM FOR BREADCRUMB
Item item = new Item(null, wsFolder.getId(), name, ItemType.FOLDER, "", null, true);
item.setSpecialFolder(isSpecialFolder);
return item;

View File

@ -0,0 +1,82 @@
package org.gcube.portlets.widgets.wsexplorer.server;
import org.gcube.vomanagement.usermanagement.UserManager;
import org.gcube.vomanagement.usermanagement.exception.UserManagementPortalException;
import org.gcube.vomanagement.usermanagement.exception.UserManagementSystemException;
import org.gcube.vomanagement.usermanagement.exception.UserRetrievalFault;
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager;
import org.gcube.vomanagement.usermanagement.model.UserModel;
import org.slf4j.Logger;
import com.liferay.portal.service.UserLocalServiceUtil;
/**
* The Class UserUtil.
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 30, 2015
*/
public class UserUtil {
private static UserManager um = new LiferayUserManager();
private static Logger logger = org.slf4j.LoggerFactory.getLogger(UserUtil.class);
/**
* Gets the user full name.
*
* @param portalLogin the portal login
* @return the user full name
*/
public static String getUserFullName(String portalLogin){
logger.trace("Get user full name for: "+portalLogin);
if(portalLogin==null)
return "";
if (isWithinPortal()) { //INTO PORTAL
UserModel curr = null;
try {
try {
curr = um.getUserByScreenName(portalLogin);
} catch (UserManagementSystemException e) {
logger.error("An error occurred in getUserFullName "+e,e);
} catch (UserRetrievalFault e) {
logger.error("An error occurred in getUserFullName "+e,e);
}
} catch (UserManagementPortalException ume) {
logger.error("An error occurred in getUserFullName "+ume,ume);
}catch (Exception e) {
logger.error("An error occurred in getUserFullName "+e,e);
logger.warn("Return portal login "+portalLogin);
return portalLogin;
}
if (curr != null)
return curr.getFullname();
}else{
logger.trace("DEVELOPEMENT MODE ON");
logger.trace("Returning portal login: "+portalLogin);
return portalLogin;
}
logger.trace("Returning portal login: "+portalLogin);
return portalLogin;
}
/**
* Checks if is within portal.
*
* @return true if you're running into the portal, false if in development
*/
public static boolean isWithinPortal() {
try {
UserLocalServiceUtil.getService();
return true;
}
catch (Exception ex) {
logger.trace("Development Mode ON");
return false;
}
}
}

View File

@ -42,6 +42,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
*/
public static final Logger _log = LoggerFactory.getLogger(WorkspaceExplorerServiceImpl.class);
public static final String USERNAME_ATTRIBUTE = "username";
public static final String TEST_USER = "francesco.mangiacrapa";
/**
@ -65,7 +66,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
//for test only
// user = "test.user";
user = "francesco.mangiacrapa";
user = TEST_USER;
httpSession.setAttribute(USERNAME_ATTRIBUTE, user);
ASLSession session = SessionManager.getInstance().getASLSession(sessionID, user);
session.setScope("/gcube/devsec/devVRE");
@ -182,7 +183,13 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
case HOME:{
WorkspaceItem root = workspace.getRoot();
ASLSession session = getASLSession(this.getThreadLocalRequest().getSession());
item = new Item(null, root.getId(), session.getUsername()+"'s", ItemType.ROOT, root.getPath(), root.getOwner().getPortalLogin(), root.isFolder());
String fullName = UserUtil.getUserFullName(session.getUsername());
if(fullName.indexOf(" ")>0){
fullName = fullName.substring(0, fullName.indexOf(" "));
}else if(fullName.indexOf(".")>0){
fullName = fullName.substring(0, fullName.indexOf("."));
}
item = new Item(null, root.getId(), fullName+"'s", ItemType.ROOT, root.getPath(), root.getOwner().getPortalLogin(), root.isFolder());
break;
}
case VRE_FOLDER:{
@ -269,7 +276,7 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
}*/
/**
* Gets the list parents by item identifier.
* Gets Breadcrumbs (the list of parents) by item identifier.
*
* @param itemIdentifier the item identifier
* @param includeItemAsParent - if parameter is true and item passed in input is a folder, the folder is included in path returned as last parent
@ -277,29 +284,35 @@ public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implement
* @throws Exception the exception
*/
@Override
public List<Item> getListParentsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception {
public List<Item> getBreadcrumbsByItemIdentifier(String itemIdentifier, boolean includeItemAsParent) throws Exception {
List<Item> listParents = new ArrayList<Item>();
_log.trace("ListParents By Item Identifier "+ itemIdentifier);
try {
Workspace workspace = getWorkspace();
WorkspaceItem wsItem = workspace.getItem(itemIdentifier);
_log.trace("workspace retrieve item name: "+wsItem.getName());
// String nameSpecialFolder = getNameForSpecialFolder();
if(includeItemAsParent==true && wsItem.isFolder()){
listParents.add(ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsItem, null));
}
while(wsItem!=null && wsItem.getParent()!=null){
WorkspaceFolder wsFolder = wsItem.getParent();
listParents.add(ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsFolder, null));
Item parent = ItemBuilder.buildFolderForBreadcrumbs((WorkspaceFolder) wsFolder, null);
listParents.add(parent);
if(parent.isSpecialFolder()) //SKIP HOME PARENT TO MY_SPECIAL_FOLDER
break;
wsItem = wsFolder;
}
Collections.reverse(listParents);
System.out.println("Parent's:");
for (Item item : listParents) {
System.out.println(item);
}
//SET PARENTS
for(int i=0; i<listParents.size()-1; i++){