public List<DmFolder> getSharedChildList(String accountSharedId, String folderIdParent) { DmAccount permittedAccount = null; if (accountSharedId != null) { permittedAccount = new DmAccount(); permittedAccount.setId(accountSharedId); } DmFolder parentFolder = null; if (folderIdParent != null) { parentFolder = findById(folderIdParent); // parentFolder = new DmFolder(); // parentFolder.setId(folderIdParent); } List<DmFolder> folderList = null; if (parentFolder != null) { Criteria crit = getSession().createCriteria(DmFolderPermission.class); crit.setProjection(Projections.property("folder")); crit.add(Restrictions.eq("account", permittedAccount)); crit.add(Restrictions.ne("account", parentFolder.getOwner())); // crit.add(Restrictions.ge("permissionType", // ApplicationConstants.FOLDER_PERMISSION_WRITER)); crit.createAlias("folder", "folderInfo"); crit.add(Restrictions.eq("folderInfo.parent", parentFolder)); crit.addOrder(Order.asc("folderInfo.name")); folderList = crit.list(); // start - get children for each child (trigger lazy fetch) for (DmFolder folderTmp : folderList) { if (folderTmp.getChildList() != null) { folderTmp.getChildList().size(); } } // end - get children for each child (trigger lazy fetch) } return folderList; }
public List<DmFolderNode> getSharedChildFolderNodeList( String accountSharedId, String folderIdParent) { // DmAccount permittedAccount = null; // if (accountSharedId != null) { // permittedAccount = new DmAccount(); // permittedAccount.setId(accountSharedId); // } // DmFolder parentFolder = null; if (folderIdParent != null) { parentFolder = findById(folderIdParent); // parentFolder = new DmFolder(); // parentFolder.setId(folderIdParent); } List<DmFolderNode> folderNodeList = null; // DetachedCriteria subquery = DetachedCriteria.forClass(DmFolder.class); // subquery.setProjection(Projections.count("id")); // subquery.add(Restrictions.eq("account", permittedAccount)); // disjunction.add(Subqueries.propertyNotIn("folderParent.parent", subquery)); // Conjunction conjunction = Restrictions.conjunction(); // conjunction.add(Restrictions.ge("permissionType", // ApplicationConstants.FOLDER_PERMISSION_WRITER)); // conjunction.add(Restrictions.eq("account", permittedAccount)); // crit.add(conjunction); // DetachedCriteria subquery = DetachedCriteria.forClass(DmFolderPermission.class); // subquery.setProjection(Projections.property("folder")); // subquery.add(conjunction); // Disjunction disjunction = Restrictions.disjunction(); // disjunction.add(Restrictions.isNull("folderChildren.permissionList")); // disjunction.add(Subqueries.propertyIn("folderInfo.childList", subquery)); // disjunction.add(Restrictions.eq("childPermission.account", permittedAccount)); // disjunction.add(Subqueries.propertyIn("folderChildren", subquery)); // Criteria crit = getSession().createCriteria(DmFolderPermission.class, "permission"); // crit.createAlias("folder", "folderInfo"); // // crit.add(Restrictions.eq("account", permittedAccount)); // crit.add(Restrictions.ge("permission.permissionType", // ApplicationConstants.FOLDER_PERMISSION_WRITER)); // crit.createAlias("folderInfo.childList", "folderChildren", // CriteriaSpecification.LEFT_JOIN); // crit.createCriteria("folderInfo.childList", "folderChildren", // CriteriaSpecification.LEFT_JOIN); // crit.createAlias("folderChildren.permissionList", "childPermission", // CriteriaSpecification.LEFT_JOIN); // crit.add(disjunction); // select fp.df_name, count(fc.df_id) // from dm_folder fp // left join dm_folder fc // on fp.df_id = fc.df_parent_id // -- where // -- fp.df_id = '517243bd-3ea5-489a-9b87-feeabd8c4f4c' // group by fp.df_name // crit.setProjection( // Projections.projectionList() // .add( Projections.property("folderInfo.id"), "id" ) // .add( Projections.property("folderInfo.name"), "name" ) // .add( Projections.count("folderChildren.id"), "numChildren" ) //// .add( Projections.property("folderChildren.id"), "numChildren" ) // .add( Projections.property("folderInfo.owner.id"), "ownerAccountId" ) // .add( Projections.property("permissionType"), "permissionType" ) // .add( Projections.groupProperty("id") ) // ); // crit.add(Restrictions.eq("folderInfo.parent", parentFolder)); // crit.addOrder(Order.asc("folderInfo.name")); // crit.setResultTransformer(Transformers.aliasToBean(DmFolderNode.class)); // folderNodeList = crit.list(); if (parentFolder != null) { String sqlSub = "SELECT" + " count(*)" + " from dm_folder fChild" + " left join dm_folder_permission fChildPerm" + " on fChild.df_id = fChildPerm.df_id" + " where fChild.df_parent_id = f.df_id" + " and fChildPerm.da_id = :accountSharedId" + " and fChildPerm.da_id <> :accountOwnerId" // + " and fChildPerm.dfp_permission_type >= " + // ApplicationConstants.FOLDER_PERMISSION_WRITER ; String sql = "SELECT" + " f.df_id as \"id\", f.df_name as \"name\", (" + sqlSub + ") as \"numChildren\"" + ", f.da_id_owner as \"ownerAccountId\", fp.dfp_permission_type as \"permissionType\"" + " FROM dm_folder_permission fp" + " LEFT JOIN dm_folder f" + " on fp.df_id = f.df_id" + " WHERE fp.da_id = :accountSharedId" + " AND f.df_parent_id = :folderIdParent" + " ORDER BY f.df_name asc"; SQLQuery query = getSession().createSQLQuery(sql); query.setString("accountSharedId", accountSharedId); query.setString("folderIdParent", folderIdParent); query.setString("accountOwnerId", parentFolder.getOwner().getId()); query.addScalar("id", Hibernate.STRING); query.addScalar("name", Hibernate.STRING); query.addScalar("numChildren", Hibernate.INTEGER); query.addScalar("ownerAccountId", Hibernate.STRING); query.addScalar("permissionType", Hibernate.INTEGER); // .add( Projections.property("folderInfo.id"), "id" ) // .add( Projections.property("folderInfo.name"), "name" ) // .add( Projections.count("folderChildren.id"), "numChildren" ) //// .add( Projections.property("folderChildren.id"), "numChildren" ) // .add( Projections.property("folderInfo.owner.id"), "ownerAccountId" ) // .add( Projections.property("permissionType"), "permissionType" ) query.setResultTransformer(Transformers.aliasToBean(DmFolderNode.class)); folderNodeList = query.list(); } return folderNodeList; }