@SuppressWarnings("unchecked")
private Permissionable retrievePermissionable (String assetId, Long language, User user, boolean respectFrontendRoles) throws DotDataException, DotSecurityException {
HostAPI hostAPI = APILocator.getHostAPI();
Permissionable perm = null;
//Determining the type
try{
//Host?
perm = hostAPI.find(assetId, user, respectFrontendRoles);
}
catch(Exception e){
}
if(perm == null) {
//Content?
ContentletAPI contAPI = APILocator.getContentletAPI();
try {
if(language == null || language <= 0){
language=APILocator.getLanguageAPI().getDefaultLanguage().getId();
}
perm = contAPI.findContentletByIdentifier(assetId, false, language, user, respectFrontendRoles);
} catch (DotContentletStateException e) {
}
}
if(perm == null) {
DotConnect dc = new DotConnect();
ArrayList results = new ArrayList();
String assetType ="";
dc.setSQL("Select asset_type from identifier where id =?");
dc.addParam(assetId);
ArrayList assetResult = dc.loadResults();
if(assetResult.size()>0){
assetType = (String) ((Map)assetResult.get(0)).get("asset_type");
}
if(UtilMethods.isSet(assetType)){
dc.setSQL("select i.inode, type from inode i,"+assetType+" a where i.inode = a.inode and a.identifier = ?");
dc.addParam(assetId);
results = dc.loadResults();
}
if(results.size() > 0) {
String type = (String) ((Map)results.get(0)).get("type");
String inode = (String) ((Map)results.get(0)).get("inode");
perm = InodeFactory.getInode(inode, InodeUtils.getClassByDBType(type));
}
}
if(perm == null || !UtilMethods.isSet(perm.getPermissionId())) {
perm = InodeFactory.getInode(assetId, Inode.class);
}
return perm;
}