2013-10-04 17:15:49 +02:00
package org.gcube.portlets.admin.vredeployer.server ;
2014-03-02 18:06:37 +01:00
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor ;
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor ;
2013-10-04 17:15:49 +02:00
import java.io.BufferedReader ;
import java.io.ByteArrayOutputStream ;
import java.io.File ;
import java.io.FileNotFoundException ;
import java.io.FileReader ;
import java.io.IOException ;
import java.io.StringReader ;
import java.rmi.RemoteException ;
import java.util.ArrayList ;
2013-10-18 18:03:32 +02:00
import java.util.Date ;
2013-10-04 17:15:49 +02:00
import java.util.HashMap ;
import java.util.Hashtable ;
import java.util.LinkedList ;
import java.util.List ;
2013-10-18 18:03:32 +02:00
import java.util.UUID ;
2013-10-04 17:15:49 +02:00
import javax.servlet.http.HttpSession ;
import javax.xml.parsers.DocumentBuilder ;
import javax.xml.parsers.DocumentBuilderFactory ;
import javax.xml.parsers.ParserConfigurationException ;
import javax.xml.transform.Transformer ;
import javax.xml.transform.TransformerConfigurationException ;
import javax.xml.transform.TransformerException ;
import javax.xml.transform.TransformerFactory ;
import javax.xml.transform.dom.DOMSource ;
import javax.xml.transform.stream.StreamResult ;
import javax.xml.transform.stream.StreamSource ;
import org.gcube.application.framework.core.session.ASLSession ;
import org.gcube.application.framework.core.session.SessionManager ;
import org.gcube.application.framework.vremanagement.vremanagement.impl.VREGeneratorEvo ;
2013-10-04 18:40:33 +02:00
import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager ;
import org.gcube.applicationsupportlayer.social.NotificationsManager ;
import org.gcube.common.homelibrary.home.HomeLibrary ;
2014-02-14 13:04:57 +01:00
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException ;
2013-10-04 18:40:33 +02:00
import org.gcube.common.homelibrary.home.workspace.Workspace ;
2014-02-14 13:04:57 +01:00
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder ;
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType ;
import org.gcube.common.homelibrary.home.workspace.usermanager.GCubeGroup ;
import org.gcube.common.portal.PortalContext ;
2014-03-02 18:06:37 +01:00
import org.gcube.common.resources.gcore.GenericResource ;
2014-02-14 13:04:57 +01:00
import org.gcube.common.scope.api.ScopeProvider ;
2014-03-02 18:06:37 +01:00
import org.gcube.informationsystem.publisher.RegistryPublisher ;
import org.gcube.informationsystem.publisher.RegistryPublisherFactory ;
2013-10-04 17:15:49 +02:00
import org.gcube.portal.custom.communitymanager.OrganizationsUtil ;
import org.gcube.portal.custom.communitymanager.PortletsIdManager ;
import org.gcube.portal.custom.communitymanager.ThemesIdManager ;
import org.gcube.portal.custom.communitymanager.components.GCUBELayoutTab ;
import org.gcube.portal.custom.communitymanager.components.GCUBEPortlet ;
import org.gcube.portal.custom.communitymanager.components.GCUBESiteLayout ;
import org.gcube.portal.custom.communitymanager.impl.OrganizationManagerImpl ;
import org.gcube.portal.custom.communitymanager.types.GCUBELayoutType ;
import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper ;
2013-10-18 18:03:32 +02:00
import org.gcube.portal.databook.server.DBCassandraAstyanaxImpl ;
import org.gcube.portal.databook.server.DatabookStore ;
import org.gcube.portal.databook.shared.Feed ;
import org.gcube.portal.databook.shared.FeedType ;
import org.gcube.portal.databook.shared.PrivacyLevel ;
import org.gcube.portal.databook.shared.UserInfo ;
import org.gcube.portal.databook.shared.ex.FeedIDNotFoundException ;
2013-10-04 17:15:49 +02:00
import org.gcube.portlets.admin.vredeployer.client.VredeployerService ;
import org.gcube.portlets.admin.vredeployer.client.model.VREFunctionalityModel ;
import org.gcube.portlets.admin.vredeployer.shared.GHNMemory ;
import org.gcube.portlets.admin.vredeployer.shared.GHNProfile ;
import org.gcube.portlets.admin.vredeployer.shared.GHNSite ;
import org.gcube.portlets.admin.vredeployer.shared.ResourceCategory ;
import org.gcube.portlets.admin.vredeployer.shared.ResourceCategoryItem ;
import org.gcube.portlets.admin.vredeployer.shared.RunningInstance ;
import org.gcube.portlets.admin.vredeployer.shared.VREDeployerStatusType ;
import org.gcube.portlets.admin.vredeployer.shared.VREDescrBean ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientCloudReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientDeployReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientFunctionalityDeployReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientFunctionalityReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientResource ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientResourceManagerDeployingReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientResourcesDeployReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.ClientServiceReport ;
import org.gcube.portlets.admin.vredeployer.shared.deployreport.DeployStatus ;
2014-03-02 18:06:37 +01:00
import org.gcube.resources.discovery.client.api.DiscoveryClient ;
import org.gcube.resources.discovery.client.queries.api.SimpleQuery ;
2013-10-04 17:15:49 +02:00
import org.gcube.vomanagement.usermanagement.GroupManager ;
import org.gcube.vomanagement.usermanagement.RoleManager ;
import org.gcube.vomanagement.usermanagement.UserManager ;
2014-02-14 13:04:57 +01:00
import org.gcube.vomanagement.usermanagement.exception.GroupRetrievalFault ;
2013-10-04 17:15:49 +02:00
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.LiferayGroupManager ;
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayRoleManager ;
import org.gcube.vomanagement.usermanagement.impl.liferay.LiferayUserManager ;
import org.gcube.vomanagement.usermanagement.model.GroupModel ;
import org.gcube.vomanagement.usermanagement.model.UserModel ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.FunctionalityItem ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.GHN ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.GHNsPerFunctionality ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.ResourceDescriptionItem ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.ResourceItem ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.RunningInstanceMessage ;
import org.gcube.vremanagement.vremodel.cl.stubs.types.VREDescription ;
import org.gcube.vremanagement.vremodeler.utils.Utils ;
import org.gcube.vremanagement.vremodeler.utils.reports.DeployReport ;
import org.gcube.vremanagement.vremodeler.utils.reports.FunctionalityReport ;
import org.gcube.vremanagement.vremodeler.utils.reports.GHNonCloudReport ;
import org.gcube.vremanagement.vremodeler.utils.reports.Resource ;
import org.gcube.vremanagement.vremodeler.utils.reports.ServiceReport ;
import org.gcube.vremanagement.vremodeler.utils.reports.Status ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import org.w3c.dom.Document ;
2014-03-02 18:06:37 +01:00
import org.w3c.dom.Element ;
import org.w3c.dom.Node ;
2013-10-04 17:15:49 +02:00
import org.xml.sax.InputSource ;
import org.xml.sax.SAXException ;
import com.google.gwt.user.server.rpc.RemoteServiceServlet ;
import com.liferay.portal.NoSuchRoleException ;
import com.liferay.portal.kernel.exception.PortalException ;
import com.liferay.portal.kernel.exception.SystemException ;
2013-10-18 18:03:32 +02:00
import com.liferay.portal.kernel.util.WebKeys ;
2013-10-04 17:15:49 +02:00
import com.liferay.portal.model.Company ;
import com.liferay.portal.model.Group ;
2013-10-18 18:03:32 +02:00
import com.liferay.portal.model.Organization ;
2013-10-04 17:15:49 +02:00
import com.liferay.portal.model.Role ;
import com.liferay.portal.service.OrganizationLocalServiceUtil ;
import com.liferay.portal.service.RoleLocalServiceUtil ;
2013-10-18 18:03:32 +02:00
import com.liferay.portal.service.UserLocalServiceUtil ;
import com.liferay.portal.theme.ThemeDisplay ;
2013-10-04 17:15:49 +02:00
/ * *
* The server side implementation of the RPC service .
* /
@SuppressWarnings ( " serial " )
public class VREDeployerServiceImpl extends RemoteServiceServlet implements VredeployerService {
private static final Logger log = LoggerFactory . getLogger ( VREDeployerServiceImpl . class ) ;
protected static final String ORGANIZATION_DEFAULT_LOGO = " /org/gcube/portal/custom/communitymanager/resources/default_logo.png " ;
2013-10-18 18:03:32 +02:00
protected static final String ORGANIZATION_DEFAULT_LOGO_URL = " http://ftp.d4science.org/apps/profiles/d4slogo.png " ;
2013-10-04 17:15:49 +02:00
private static final int LIFERAY_REGULAR_ROLE_ID = 1 ;
/ * *
*
* /
private static final String VRE_GENERATOR_ATTRIBUTE = " VREGenerator " ;
private static final String GHN_PER_FUNC_ATTRIBUTE = " GHN_PER_FUNC_ATTRIBUTE " ;
private static final String HARD_CODED_VO_NAME = " /gcube/devsec " ;
private static final String APPROVING_VRE = " approvingVRE " ;
public static final String APPROVE_MODE = " approve " ;
public static final String EDIT_MODE = " edit " ;
public static final String REEDIT_TYPE_ATTRIBUTE = " reeditType " ;
public static final String MODE_ATTRIBUTE = " mode " ;
private static final String DESCRIPTION = " DESCRIPTION " ;
private static final String DEPLOYING = " DEPLOYING " ;
private static final String DESIGNER = " Designer " ;
private static final String MANAGER = " Manager " ;
/ * *
*
* /
private boolean isTesting = true ;
String customEPR = " 1d648460-2d05-11e3-9f6f-a17a856bd44f " ;
/ * *
*
* @return
* /
private VREGeneratorEvo getVREGeneratorEvo ( ASLSession aslSession ) {
log . info ( " getVREGeneratorEvo called with scope: " + aslSession . getScopeName ( ) ) ;
String vreid = ( String ) aslSession . getAttribute ( VRE_GENERATOR_ATTRIBUTE ) ;
if ( vreid = = null ) {
return null ;
}
return new VREGeneratorEvo ( aslSession , vreid ) ; //cannot cache VREGeneretor instance;
}
private void setDeployingStatusOn ( ) {
getASLSession ( ) . setAttribute ( DEPLOYING , " ON " ) ;
}
private void setDeployingStatusOff ( ) {
getASLSession ( ) . setAttribute ( DEPLOYING , null ) ;
}
private boolean isDeploying ( ) {
return getASLSession ( ) . getAttribute ( DEPLOYING ) ! = null ;
}
/ * *
*
* @return
* /
private ASLSession getASLSession ( ) {
log . info ( " getVREGeneratorEvo getASLSession() : " ) ;
2013-10-04 18:40:33 +02:00
HttpSession session = this . getThreadLocalRequest ( ) . getSession ( ) ;
2013-10-04 17:15:49 +02:00
String username = ( String ) session . getAttribute ( ScopeHelper . USERNAME_ATTRIBUTE ) ;
if ( username = = null ) {
username = " massimiliano.assante " ;
SessionManager . getInstance ( ) . getASLSession ( session . getId ( ) , username ) . setScope ( HARD_CODED_VO_NAME ) ;
SessionManager . getInstance ( ) . getASLSession ( session . getId ( ) , username ) . setAttribute ( REEDIT_TYPE_ATTRIBUTE , APPROVE_MODE ) ;
}
else {
isTesting = false ;
}
return SessionManager . getInstance ( ) . getASLSession ( session . getId ( ) , username ) ;
}
/ * *
* { @inheritDoc }
* /
public VREDeployerStatusType isApprovingModeEnabled ( ) {
if ( isTesting ) {
setDeployingStatusOff ( ) ;
return VREDeployerStatusType . APPROVE ;
}
if ( isDeploying ( ) )
return VREDeployerStatusType . DEPLOYING ;
log . debug ( " --- isApprovingModeEnabled in Log --- " ) ;
ASLSession aslSession = getASLSession ( ) ;
aslSession . setAttribute ( MODE_ATTRIBUTE , null ) ;
String reeditType = ( String ) aslSession . getAttribute ( REEDIT_TYPE_ATTRIBUTE ) ;
log . debug ( " REEDIT_TYPE_ATTRIBUTE = " + reeditType ) ;
aslSession . setAttribute ( REEDIT_TYPE_ATTRIBUTE , null ) ;
if ( reeditType ! = null & & reeditType . compareTo ( APPROVE_MODE ) = = 0 ) {
System . out . println ( APPROVING_VRE + " = " + true ) ;
aslSession . setAttribute ( MODE_ATTRIBUTE , APPROVING_VRE ) ;
return VREDeployerStatusType . APPROVE ;
}
else {
/* This is needed to avoid to log out and log in again to create a new VRE */
aslSession . setAttribute ( VRE_GENERATOR_ATTRIBUTE , null ) ;
}
aslSession . setAttribute ( REEDIT_TYPE_ATTRIBUTE , null ) ;
return VREDeployerStatusType . NON_APPROVE ;
}
/ * *
* return the VRE Overall Information
* /
public VREDescrBean getVRE ( ) throws NullPointerException {
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
log . info ( " VRE EPR: " + vreGenerator . getVREepr ( ) ) ;
}
VREDescrBean vreDescBean = null ;
log . debug ( " --- Getting VRE Model --- " ) ;
try {
VREDescription sd = vreGenerator . getVREModel ( ) ;
vreDescBean = new VREDescrBean ( sd . name ( ) , sd . description ( ) , sd . designer ( ) , sd . manager ( ) , sd . startTime ( ) . getTime ( ) , sd . endTime ( ) . getTime ( ) ) ;
getASLSession ( ) . setAttribute ( DESIGNER , sd . designer ( ) ) ;
getASLSession ( ) . setAttribute ( MANAGER , sd . manager ( ) ) ;
} catch ( RemoteException e ) {
e . printStackTrace ( ) ;
}
log . debug ( " Model: " + vreDescBean . getName ( ) ) ;
log . debug ( " --- END Getting VRE Model --- " ) ;
return vreDescBean ;
}
/ * *
* return the name and last name of the user
* @param username
* @return
* /
private String getFullname ( String screenName ) {
UserManager um = new LiferayUserManager ( ) ;
UserModel user = null ;
try {
user = um . getUserByScreenName ( screenName ) ;
} catch ( UserManagementSystemException e ) {
e . printStackTrace ( ) ;
} catch ( UserRetrievalFault e ) {
e . printStackTrace ( ) ;
} catch ( UserManagementPortalException e ) {
e . printStackTrace ( ) ;
}
return user . getFullname ( ) ;
}
/ * *
* read the available functionality from the service through ASL extension
* /
@Override
public VREFunctionalityModel getFunctionality ( ) {
VREFunctionalityModel toReturn = new VREFunctionalityModel ( " " , " selected functionality " , " " , " " , false ) ;
HashMap < String , ArrayList < ResourceCategory > > funCategories = new HashMap < String , ArrayList < ResourceCategory > > ( ) ;
List < FunctionalityItem > list = null ;
VREGeneratorEvo vreGenerator = null ;
try {
if ( isTesting )
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
log . info ( " VRE EPR: " + vreGenerator . getVREepr ( ) ) ;
}
list = vreGenerator . getFunctionality ( ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
if ( list = = null ) {
log . warn ( " FunctionalityList NULL " ) ;
return null ;
}
for ( FunctionalityItem fi : list ) {
System . out . println ( fi . id ( ) + " - " + fi . name ( ) ) ;
VREFunctionalityModel toAdd = new VREFunctionalityModel ( Integer . toString ( fi . id ( ) ) ,
fi . name ( ) , fi . description ( ) , " " , fi . selected ( ) ) ;
if ( fi . children ( ) ! = null ) {
List < FunctionalityItem > children = fi . children ( ) ;
ArrayList < VREFunctionalityModel > newchildrens = new ArrayList < VREFunctionalityModel > ( ) ;
//creating node children
for ( FunctionalityItem child : children ) {
System . out . println ( child . name ( ) + " is " + child . selected ( ) ) ;
if ( child . selected ( ) ) {
VREFunctionalityModel subFunc = new VREFunctionalityModel ( Integer . toString ( child . id ( ) ) ,
child . name ( ) , child . description ( ) ,
" functionality-add-icon " , child . selected ( ) ) ;
newchildrens . add ( subFunc ) ;
ArrayList < VREFunctionalityModel > resourceChildren = new ArrayList < VREFunctionalityModel > ( ) ;
if ( child . selectableResourcesDescription ( ) ! = null ) {
for ( ResourceDescriptionItem category : child . selectableResourcesDescription ( ) ) {
if ( category . resources ( ) ! = null )
for ( ResourceItem resource : category . resources ( ) )
if ( resource . selected ( ) )
resourceChildren . add ( new VREFunctionalityModel ( resource . id ( ) , resource . name ( ) , resource . description ( ) , " extres-icon " , resource . selected ( ) ) ) ;
}
//subFunc.addChildren(resourceChildrens.toArray(new VREFunctionalityModel[resourceChildrens.size()]));
}
AdditionalFuncInfo addInfo = getServicesAndGHNs ( subFunc . getId ( ) ) ;
if ( addInfo ! = null ) {
RunningInstanceMessage [ ] ris = addInfo . getMissingServices ( ) ;
for ( int j = 0 ; j < ris . length ; j + + ) {
RunningInstanceMessage ri = ris [ j ] ;
resourceChildren . add ( new VREFunctionalityModel ( " " , ri . serviceName ( ) + " ( " + ri . serviceClass ( ) + " ) " , " " , " missing-ri " , true ) ) ;
}
ris = addInfo . getFoundServices ( ) ;
for ( int j = 0 ; j < ris . length ; j + + ) {
RunningInstanceMessage ri = ris [ j ] ;
resourceChildren . add ( new VREFunctionalityModel ( " " , ri . serviceName ( ) + " ( " + ri . serviceClass ( ) + " ) " , " " , " runninginstance-icon " , true ) ) ;
}
GHN [ ] relGHNs = addInfo . getGhns ( ) ;
for ( int j = 0 ; j < relGHNs . length ; j + + ) {
GHN ghn = relGHNs [ j ] ;
resourceChildren . add ( new VREFunctionalityModel ( " " , ghn . host ( ) + " ( " + ghn . site ( ) . domain ( ) + " ) " , " " , " architecture-icon " , true ) ) ;
}
}
else
log . error ( " getServicesAndGHNs per subfunctionality returns NULL " ) ;
subFunc . addChildren ( resourceChildren . toArray ( new VREFunctionalityModel [ resourceChildren . size ( ) ] ) ) ;
}
}
if ( newchildrens . size ( ) > 0 ) {
toAdd . addChildren ( newchildrens . toArray ( new VREFunctionalityModel [ newchildrens . size ( ) ] ) ) ;
toReturn . add ( toAdd ) ;
}
}
}
for ( String func : funCategories . keySet ( ) ) {
System . out . println ( " - " + func ) ;
for ( ResourceCategory category : funCategories . get ( func ) ) {
System . out . println ( " -- " + category . getName ( ) ) ;
for ( ResourceCategoryItem rc : category . getItems ( ) ) {
System . out . println ( " ---- " + rc . getName ( ) + " : " + rc . isSelected ( ) ) ;
}
}
}
return toReturn ;
}
@Override
public void getGHNPerFunctionality ( String funcId ) {
VREGeneratorEvo vreGenerator = null ;
if ( isTesting )
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
int funcToLookFor = Integer . parseInt ( funcId ) ;
try {
GHNsPerFunctionality [ ] ghnsPerFunc = vreGenerator . getGHNsPerFunctionality ( ) ;
GHNsPerFunctionality toWorkWith = null ;
for ( int i = 0 ; i < ghnsPerFunc . length ; i + + )
if ( funcToLookFor = = ghnsPerFunc [ i ] . id ( ) ) {
toWorkWith = ghnsPerFunc [ i ] ;
break ;
}
if ( toWorkWith = = null )
return ;
List < RunningInstanceMessage > services = toWorkWith . foundServices ( ) ;
if ( services ! = null ) {
for ( RunningInstanceMessage se : services ) {
System . out . println ( se . serviceName ( ) + " - " + se . serviceClass ( ) ) ;
}
}
} catch ( RemoteException e ) {
e . printStackTrace ( ) ;
}
}
private void setGHNsPerFunctionalityInSession ( GHNsPerFunctionality [ ] ghnsPerFunc ) {
getASLSession ( ) . setAttribute ( GHN_PER_FUNC_ATTRIBUTE , ghnsPerFunc ) ;
}
private GHNsPerFunctionality [ ] getGHNsPerFunctionalityFromSession ( ) {
return ( GHNsPerFunctionality [ ] ) getASLSession ( ) . getAttribute ( GHN_PER_FUNC_ATTRIBUTE ) ;
}
/ * *
* get the list of running instances associated to a service
* @param funcId
* @return
* /
private AdditionalFuncInfo getServicesAndGHNs ( String funcId ) {
AdditionalFuncInfo toReturn = new AdditionalFuncInfo ( ) ;
try {
GHNsPerFunctionality [ ] ghnsPerFunc = null ;
if ( getGHNsPerFunctionalityFromSession ( ) = = null ) { //avoid multiple calls to the service
VREGeneratorEvo vreGenerator = null ;
if ( isTesting )
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
ghnsPerFunc = vreGenerator . getGHNsPerFunctionality ( ) ;
setGHNsPerFunctionalityInSession ( ghnsPerFunc ) ;
}
else {
ghnsPerFunc = getGHNsPerFunctionalityFromSession ( ) ;
}
int funcToLookFor = Integer . parseInt ( funcId ) ;
GHNsPerFunctionality ghnPF = null ;
for ( int i = 0 ; i < ghnsPerFunc . length ; i + + ) {
if ( funcToLookFor = = ghnsPerFunc [ i ] . id ( ) ) {
ghnPF = ghnsPerFunc [ i ] ;
break ;
}
}
if ( ghnPF = = null | | ghnPF . missingServices ( ) = = null )
toReturn . setMissingServices ( new RunningInstanceMessage [ 0 ] ) ;
else {
toReturn . setMissingServices ( ghnPF . missingServices ( ) . toArray ( new RunningInstanceMessage [ 0 ] ) ) ;
}
if ( ghnPF = = null | | ghnPF . foundServices ( ) = = null )
toReturn . setFoundServices ( new RunningInstanceMessage [ 0 ] ) ;
else {
toReturn . setFoundServices ( ghnPF . foundServices ( ) . toArray ( new RunningInstanceMessage [ 0 ] ) ) ;
}
if ( ghnPF = = null | | ghnPF . ghns ( ) = = null )
toReturn . setGhns ( new GHN [ 0 ] ) ;
else
toReturn . setGhns ( ghnPF . ghns ( ) . toArray ( new GHN [ 0 ] ) ) ;
return toReturn ;
} catch ( RemoteException e ) {
e . printStackTrace ( ) ;
return null ;
}
}
/ * *
* return the ghn available list
* @return
* @throws RemoteException
* /
@Override
public List < GHNProfile > getAvailableGHNs ( ) {
List < GHNProfile > toReturn = new ArrayList < GHNProfile > ( ) ;
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
List < GHN > ghns = null ;
try {
log . debug ( " Asking gHN list " ) ;
ghns = vreGenerator . getGHNs ( ) ;
} catch ( RemoteException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
if ( ghns = = null )
return toReturn ;
log . debug ( " got gHN list, menbers: " + ghns . size ( ) ) ;
for ( GHN ghn : ghns ) {
List < RunningInstance > ris = new ArrayList < RunningInstance > ( ) ;
if ( ghn . relatedRIs ( ) ! = null ) {
for ( int i = 0 ; i < ghn . relatedRIs ( ) . size ( ) ; i + + ) {
ris . add ( new RunningInstance ( ghn . relatedRIs ( ) . get ( i ) . serviceName ( ) , ghn . relatedRIs ( ) . get ( i ) . serviceClass ( ) ) ) ;
}
}
toReturn . add ( new GHNProfile ( ghn . id ( ) , ghn . host ( ) , ris , ghn . securityEnabled ( ) ,
new GHNMemory ( ghn . memory ( ) . memorySize ( ) + " " , ghn . memory ( ) . diskSpace ( ) + " " ) ,
new GHNSite ( ghn . site ( ) . location ( ) , ghn . site ( ) . country ( ) , ghn . site ( ) . domain ( ) ) , null ,
ghn . selected ( ) ) ) ;
}
return toReturn ;
}
/ * *
*
* @param selectedGHNIds
* @param idCandidateGHN
* @return
* /
public boolean setGHNsSelected ( String [ ] selectedGHNIds ) {
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
try {
log . debug ( " selectedIDs " ) ;
for ( int i = 0 ; i < selectedGHNIds . length ; i + + ) {
System . out . println ( " id: " + selectedGHNIds [ i ] . toString ( ) ) ;
}
vreGenerator . setGHNs ( selectedGHNIds ) ;
} catch ( RemoteException e ) {
e . printStackTrace ( ) ;
return false ;
}
return true ;
}
/ * *
*
* @return
* /
public int isCloudSelected ( ) {
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
if ( vreGenerator . isCloudSelected ( ) )
return vreGenerator . getCloudVMSelected ( ) ;
else
return - 1 ;
}
/ * *
*
* /
public int getCloudVMSelected ( ) {
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
return vreGenerator . getCloudVMSelected ( ) ;
}
/ * *
*
* @param virtualMachines
* @return
* /
public boolean setCloudDeploy ( int virtualMachines ) {
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
return vreGenerator . setCloudDeploy ( virtualMachines ) ;
}
public boolean deployVRE ( ) {
log . info ( " --- deployVRE started --- " ) ;
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
try {
vreGenerator . deployVRE ( ) ;
//need time to prepare report
log . info ( " --- SLEEP 2 seconds --- " ) ;
Thread . sleep ( 2500 ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
return false ;
}
2014-03-02 18:06:37 +01:00
//TODO: re enable in the future it gives exception
// AccessLogger log = AccessLogger.getAccessLogger();
// CreatedVRELogEntry logEntry;
// try {
// logEntry = new CreatedVRELogEntry(
// vreGenerator.getVREModel().name(),
// vreGenerator.getVREepr(),
// vreGenerator.getVREModel().designer(),
// vreGenerator.getVREModel().manager());
// log.logEntry(getASLSession().getUsername(), getASLSession().getScopeName(), logEntry);
// } catch (RemoteException e) {
// e.printStackTrace();
// }
2013-10-04 17:15:49 +02:00
return true ;
}
/ * *
* { @inheritDoc }
* /
public ClientDeployReport checkCreateVRE ( ) {
log . info ( " --- check Create VRE started --- " ) ;
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
try {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
catch ( NullPointerException e ) {
log . error ( " Error while trying to contact VRE Modeler service with TEST ID: " + customEPR +
" Probly does not exist anymore, request from " + this . getThreadLocalRequest ( ) . getRemoteHost ( ) + " ( " + this . getThreadLocalRequest ( ) . getRemoteAddr ( ) + " ) " ) ;
return new ClientDeployReport ( ) ;
}
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
DeployReport report = null ;
try {
report = vreGenerator . checkVREStatus ( ) ;
} catch ( Exception e ) {
log . error ( " Error while trying to retrieve VRE Status, return Empty Report " + e . getMessage ( ) + " \ n, " +
" request from " + this . getThreadLocalRequest ( ) . getRemoteHost ( ) + " ( " + this . getThreadLocalRequest ( ) . getRemoteAddr ( ) + " ) " ) ;
return new ClientDeployReport ( ) ;
}
if ( report = = null | | report . getStatus ( ) = = null ) {
log . error ( " --- DeployReport is NULL or Status is null, return Empty Report, " +
" request from " + this . getThreadLocalRequest ( ) . getRemoteHost ( ) + " ( " + this . getThreadLocalRequest ( ) . getRemoteAddr ( ) + " ) " ) ;
return new ClientDeployReport ( ) ;
}
if ( report . getStatus ( ) = = Status . Finished ) {
2013-10-04 18:40:33 +02:00
log . info ( " --- Create VRE COMPLETED, CREATING LAYOUTS AND COMMUNITY ... " ) ;
2013-10-04 17:15:49 +02:00
String name = " " ;
2013-10-18 18:03:32 +02:00
String description = " " ;
2013-10-04 17:15:49 +02:00
try {
2013-10-18 18:03:32 +02:00
VREDescription de = vreGenerator . getVREModel ( ) ;
name = de . name ( ) ;
description = de . description ( ) ;
2013-10-04 17:15:49 +02:00
} catch ( RemoteException e ) {
e . printStackTrace ( ) ;
}
2013-10-18 18:03:32 +02:00
String designer = ( String ) getASLSession ( ) . getAttribute ( DESIGNER ) ;
String manager = ( String ) getASLSession ( ) . getAttribute ( MANAGER ) ;
2014-02-14 13:04:57 +01:00
Organization vreCreated = createCommunityAndLayout ( name ) ;
if ( vreCreated ! = null ) {
2013-10-04 18:40:33 +02:00
try {
2014-03-02 18:06:37 +01:00
log . info ( " --- CREATED LAYOUTS AND COMMUNITY OK, updating Calendar Application Profile. " ) ;
String vreScope = getScopeByOrganizationId ( " " + vreCreated . getOrganizationId ( ) ) ;
String vreUrl = " /group/ " + vreCreated . getName ( ) . toLowerCase ( ) + " /calendar " ;
updateCalendarApplicationProfile ( vreScope , vreUrl ) ;
log . info ( " --- creating VRE Group Folder " ) ;
2014-02-14 13:04:57 +01:00
createVRESharedGroupFolder ( vreCreated , designer , manager , description ) ;
2014-03-02 18:06:37 +01:00
2014-02-14 13:04:57 +01:00
log . info ( " --- createVRESharedGroupFolder OK, sending Message to designer. " ) ;
2014-03-02 18:06:37 +01:00
2013-10-04 18:40:33 +02:00
UserManager um = new LiferayUserManager ( ) ;
UserModel userDesigner = um . getUserByScreenName ( designer ) ;
UserModel userManager = um . getUserByScreenName ( manager ) ;
Workspace workspace = HomeLibrary . getUserWorkspace ( getASLSession ( ) . getUsername ( ) ) ;
ArrayList < String > toSend = new ArrayList < String > ( ) ;
toSend . add ( designer ) ;
2014-03-02 18:06:37 +01:00
String subject = " Definition approved and deployed " ;
String body = " Dear " + userDesigner . getFirstname ( ) + " , \ n \ n " + userManager . getFullname ( ) + " has approved the deployment of the group you requested: " + name + " . " ;
body + = " . \ n \ nThis group has been deployed successfully and is already available for you on this portal. Please, check your list. " ;
2013-10-04 18:40:33 +02:00
workspace . getWorkspaceMessageManager ( ) . sendMessageToPortalLogins ( subject , body , new ArrayList < String > ( ) , toSend ) ;
NotificationsManager nnm = new ApplicationNotificationsManager ( getASLSession ( ) ) ;
if ( nnm . notifyMessageReceived ( designer , subject ) )
2014-03-02 18:06:37 +01:00
log . trace ( " Sending Definition create notification: " + subject + " OK " ) ;
2013-10-04 18:40:33 +02:00
} catch ( Exception e ) {
}
2013-10-18 18:03:32 +02:00
log . info ( " --- Trying to share a news for this VRE " ) ;
2014-03-02 18:06:37 +01:00
//shareCreatedVRENews(designer, manager, name, description);
2013-10-18 18:03:32 +02:00
2014-02-14 13:04:57 +01:00
2013-10-04 18:40:33 +02:00
} else
log . error ( " --- DANGER DANGER DANGER!!!!! -> CREATED LAYOUTS AND COMMUNITY WITH ERRORS " ) ;
2013-10-04 17:15:49 +02:00
}
else
setDeployingStatusOn ( ) ;
//jsut for testing
// if (isTesting)
// return convertServiceDeployReport(simulateReport());
log . debug ( " ---Sending Report, globalState --- " + report . getStatus ( ) ) ;
return convertServiceDeployReport ( report ) ;
2014-03-02 18:06:37 +01:00
}
2014-03-02 23:52:26 +01:00
/ * *
* update the ApplicationProfile of the calendar for this scope
* @param vreScope
* @param vreURL
* /
2014-03-02 18:06:37 +01:00
private void updateCalendarApplicationProfile ( String vreScope , String vreURL ) {
String appId = " org.gcube.portal.calendarwrapper.GCubeCalendarHandler " ;
String currScope = ScopeProvider . instance . get ( ) ;
String scopeToQuery = PortalContext . getConfiguration ( ) . getInfrastructureName ( ) ;
ScopeProvider . instance . set ( " / " + scopeToQuery ) ;
SimpleQuery query = queryFor ( GenericResource . class ) ;
query . addCondition ( " $resource/Profile/SecondaryType/text() eq 'ApplicationProfile' " ) ;
query . addCondition ( " $resource/Profile/Body/AppId/text() eq ' " + appId + " ' " ) ;
DiscoveryClient < GenericResource > client = clientFor ( GenericResource . class ) ;
//
List < GenericResource > list = client . submit ( query ) ;
if ( list = = null | | list . isEmpty ( ) ) {
log . error ( " Cannot retrieve the IS profile for resource: " ) ;
return ;
}
GenericResource gr = list . get ( 0 ) ;
log . debug ( " updating " + gr . profile ( ) . name ( ) ) ;
String endpoint = " <EndPoint><Scope> " + vreScope + " </Scope><URL> " + vreURL + " </URL></EndPoint> " ;
Node fragmentNode ;
try {
DocumentBuilder docBuilder = DocumentBuilderFactory . newInstance ( ) . newDocumentBuilder ( ) ;
Element elem = gr . profile ( ) . body ( ) ;
System . out . println ( " QUI " ) ;
fragmentNode = docBuilder . parse ( new InputSource ( new StringReader ( endpoint ) ) ) . getDocumentElement ( ) ;
fragmentNode = elem . getOwnerDocument ( ) . importNode ( fragmentNode , true ) ;
elem . appendChild ( fragmentNode ) ;
} catch ( Exception e ) {
//in case no xml is entered, just text
log . error ( " errore " ) ;
}
RegistryPublisher rp = RegistryPublisherFactory . create ( ) ;
rp . update ( gr ) ;
ScopeProvider . instance . set ( currScope ) ;
2013-10-04 17:15:49 +02:00
}
2014-02-14 13:04:57 +01:00
/ * *
* this method is in charge of reflecting the VRE deployed in a gCube Portal context in the HomeLibrary JackRabbit Repository .
It also creates shared folders for these groups and assign VRE - Managers as Administrators of such foldes
* @param vreName
* @param vreScope
* @param designer the username of the designer
* @param manager the username of the manager
* @param description
* @throws GroupRetrievalFault
* @throws UserManagementSystemException
* /
private void createVRESharedGroupFolder ( Organization vreCreated , String designer , String manager , String description ) throws Exception {
String currScope = ScopeProvider . instance . get ( ) ;
ScopeProvider . instance . set ( " / " + getRootOrganizationName ( ) ) ;
GroupManager gm = new LiferayGroupManager ( ) ;
UserManager um = new LiferayUserManager ( ) ;
GroupModel group = gm . getGroup ( " " + vreCreated . getOrganizationId ( ) ) ;
String groupId = group . getGroupId ( ) ;
String vreName = group . getGroupName ( ) ;
String vreScope = gm . getScope ( groupId ) ;
List < UserModel > users = um . listUsersByGroup ( group . getGroupId ( ) ) ;
2014-03-02 18:06:37 +01:00
String vreDesignerUserName = designer ;
if ( vreDesignerUserName ! = null ) {
2014-02-14 13:04:57 +01:00
Workspace ws = HomeLibrary
. getHomeManagerFactory ( )
. getHomeManager ( )
2014-03-02 18:06:37 +01:00
. getHome ( vreDesignerUserName )
2014-02-14 13:04:57 +01:00
. getWorkspace ( ) ;
GCubeGroup gGroup = createGroup ( vreScope , users ) ;
String groupid = ( gGroup = = null ) ? vreScope : gGroup . getName ( ) ;
WorkspaceSharedFolder wSharedFolder = createVREFolder ( vreScope , vreName , groupid , ws ) ;
List < String > groups = new ArrayList < String > ( ) ;
groups . add ( gGroup . getName ( ) ) ;
wSharedFolder . setACL ( groups , ACLType . WRITE_OWNER ) ;
} else {
log . error ( " NO VRE-MANAGER FOUND IN THIS VRE " ) ;
}
ScopeProvider . instance . set ( currScope ) ;
}
/ * *
* return the infrastructure name
* /
private static String getRootOrganizationName ( ) {
return PortalContext . getConfiguration ( ) . getInfrastructureName ( ) ;
}
/ * *
*
* @param vreScope
* @param vreName
* @param groupId
* @param ws
* @return
* @throws Exception
* /
private static WorkspaceSharedFolder createVREFolder ( String vreScope , String vreName , String groupId , Workspace ws ) throws Exception {
WorkspaceSharedFolder folder = ws . createSharedFolder ( vreScope , " Special Shared folder for VRE " + vreName , groupId , ws . getRoot ( ) . getId ( ) , vreName , true ) ;
System . out . println ( folder . getPath ( ) ) ;
return folder ;
2013-10-04 17:15:49 +02:00
2014-02-14 13:04:57 +01:00
}
/ * *
* Create the group in HL and assign users to it
* @param vreScope the scope of the vre as name
* @param usersToAdd the listo of users to add
* @throws InternalErrorException
* /
private static GCubeGroup createGroup ( String vreScope , List < UserModel > usersToAdd ) throws InternalErrorException {
org . gcube . common . homelibrary . home . workspace . usermanager . UserManager gm = HomeLibrary
. getHomeManagerFactory ( ) . getUserManager ( ) ;
GCubeGroup group = gm . createGroup ( vreScope ) ;
for ( UserModel user : usersToAdd ) {
group . addMember ( user . getScreenName ( ) ) ;
}
return group ;
}
2013-10-18 18:03:32 +02:00
/ * *
*
2014-02-14 13:04:57 +01:00
* @param designer the username of the designer
* @param manager the username of the manager
* @param name the vre name
2013-10-18 18:03:32 +02:00
* /
private void shareCreatedVRENews ( String designer , String manager , String name , String description ) {
String text = " A new Virtual Research Environment is worming up. " + name + " announced open day is tomorrow! " ;
Date feedDate = new Date ( ) ;
UserInfo managerInfo = null ;
try {
managerInfo = getuserInfo ( manager ) ;
} catch ( Exception e1 ) {
e1 . printStackTrace ( ) ;
}
String previewTitle = " The new VRE " + name + " will be available starting from tomorrow " ;
Feed toShare = new Feed ( UUID . randomUUID ( ) . toString ( ) , FeedType . TWEET , managerInfo . getUsername ( ) , feedDate ,
" " , " /group/data-e-infrastructure-gateway/join-new " , ORGANIZATION_DEFAULT_LOGO_URL , text ,
PrivacyLevel . VRES ,
managerInfo . getFullName ( ) ,
managerInfo . getEmailaddress ( ) ,
managerInfo . getAvatarId ( ) ,
previewTitle ,
description , " d4science.org " , false ) ;
DatabookStore store = new DBCassandraAstyanaxImpl ( ) ;
log . trace ( " Attempting to save Feed with text: " + text ) ;
boolean result = store . saveUserFeed ( toShare ) ;
if ( result ) {
for ( GroupModel vre : getUserVREs ( manager ) ) {
String vreScope = getScopeByOrganizationId ( vre . getGroupId ( ) ) ;
log . trace ( " Attempting to write onto " + vreScope ) ;
try {
store . saveFeedToVRETimeline ( toShare . getKey ( ) , vreScope ) ;
} catch ( FeedIDNotFoundException e ) {
log . error ( " Error writing onto VRES Time Line " + vreScope ) ;
} //save the feed
log . trace ( " Success writing onto " + vreScope ) ;
}
}
}
2014-02-14 13:04:57 +01:00
/ * *
*
* @param vreid the organizatio id in Liferay API
* @return
* /
2013-10-18 18:03:32 +02:00
private String getScopeByOrganizationId ( String vreid ) {
GroupManager gm = new LiferayGroupManager ( ) ;
try {
return gm . getScope ( vreid ) ;
} catch ( Exception e ) {
log . error ( " Could not find a scope for this VREid: " + vreid ) ;
return null ;
}
}
private UserInfo getuserInfo ( String username ) throws PortalException , SystemException {
log . debug ( " getuserInfo for " + username ) ;
String email = username + " @isti.cnr.it " ;
String fullName = username + " FULL " ;
String thumbnailURL = " images/Avatar_default.png " ;
String accountURL = " " ;
if ( ! isTesting ) {
getUserVREs ( username ) ;
com . liferay . portal . model . UserModel user = UserLocalServiceUtil . getUserByScreenName ( OrganizationsUtil . getCompany ( ) . getCompanyId ( ) , username ) ;
thumbnailURL = " /image/user_male_portrait?img_id= " + user . getPortraitId ( ) ;
fullName = user . getFirstName ( ) + " " + user . getLastName ( ) ;
email = user . getEmailAddress ( ) ;
ThemeDisplay themeDisplay = ( ThemeDisplay ) this . getThreadLocalRequest ( ) . getSession ( ) . getAttribute ( WebKeys . THEME_DISPLAY ) ;
accountURL = themeDisplay . getURLMyAccount ( ) . toString ( ) ;
}
return new UserInfo ( username , fullName , thumbnailURL , email , accountURL , true , false , null ) ;
}
/ * *
*
* @param username
* @return
* /
private ArrayList < GroupModel > getUserVREs ( String username ) {
log . debug ( " getUserVREs for " + username ) ;
ArrayList < GroupModel > toReturn = new ArrayList < GroupModel > ( ) ;
com . liferay . portal . model . User currUser ;
try {
GroupManager gm = new LiferayGroupManager ( ) ;
currUser = OrganizationsUtil . validateUser ( username ) ;
2014-02-14 13:04:57 +01:00
2013-10-18 18:03:32 +02:00
for ( Organization org : currUser . getOrganizations ( ) )
if ( gm . isVRE ( org . getOrganizationId ( ) + " " ) ) {
GroupModel toAdd = gm . getGroup ( " " + org . getOrganizationId ( ) ) ;
toReturn . add ( toAdd ) ;
}
} catch ( Exception e ) {
log . error ( " Failed reading User VREs for : " + username ) ;
e . printStackTrace ( ) ;
return toReturn ;
}
return toReturn ;
}
2013-10-04 17:15:49 +02:00
/ * *
*
* @return the html representation of the report
* /
public String getHTMLReport ( ) {
log . info ( " --- getHTMLReport VRE --- " ) ;
VREGeneratorEvo vreGenerator = null ;
if ( isTesting ) {
vreGenerator = new VREGeneratorEvo ( getASLSession ( ) , customEPR ) ;
}
else {
ASLSession aslSession = getASLSession ( ) ;
vreGenerator = getVREGeneratorEvo ( aslSession ) ;
}
String report = null ;
try {
report = Utils . toXML ( vreGenerator . checkVREStatus ( ) ) ;
} catch ( RemoteException e ) {
e . printStackTrace ( ) ;
}
String startDirectory = this . getServletContext ( ) . getRealPath ( " " ) ;
String xslFileLocation = startDirectory + " /styles/report.xsl " ;
String transformed = " " ;
if ( isTesting ) {
String pathXML = startDirectory + " /xml/report.xml " ;
log . info ( " --- pathXML: " + pathXML ) ;
log . info ( " --- xsl: " + xslFileLocation ) ;
transformed = transformToHtml ( fileToString ( pathXML ) , xslFileLocation ) ;
}
else {
transformed = transformToHtml ( report , xslFileLocation ) ;
}
return transformed ;
}
/ * *
* convert the service report to a report client sendable
* @param toConvert
* @return
* /
private ClientDeployReport convertServiceDeployReport ( DeployReport toConvert ) {
ClientDeployReport toReturn = new ClientDeployReport ( ) ;
//*** Overall deploy status report part
toReturn . setGlobalStatus ( convStatus ( toConvert . getStatus ( ) ) ) ;
//*** Cloud deploy report part
GHNonCloudReport cDeploy = toConvert . getCloudDeployingReport ( ) ;
if ( isCloudSelected ( ) ! = - 1 ) {
System . out . println ( " ***** GHNonCloudReportSelected ****** " ) ;
List < DeployStatus > singleCloudStatus = new LinkedList < DeployStatus > ( ) ;
for ( int i = 0 ; i < cDeploy . getDeployingState ( ) . length ; i + + ) {
singleCloudStatus . add ( convStatus ( cDeploy . getDeployingState ( ) [ i ] ) ) ;
}
toReturn . setCloudReport ( new ClientCloudReport ( convStatus ( cDeploy . getStatus ( ) ) , singleCloudStatus ) ) ;
}
else {
System . out . println ( " ***** GHNonCloudReport Not Selected ****** " ) ;
ClientCloudReport cdp = new ClientCloudReport ( ) ;
cdp . setStatus ( DeployStatus . SKIP ) ;
toReturn . setCloudReport ( cdp ) ;
}
//*** ResourceManager deploy report part
toReturn . setResourceManagerReport (
new ClientResourceManagerDeployingReport ( convStatus ( toConvert . getResourceDeployingReport ( ) . getStatus ( ) ) , toConvert . getResourceDeployingReport ( ) . toString ( ) ) ) ;
//*** Functionality deploy report part
ClientFunctionalityDeployReport cfDeployReport = new ClientFunctionalityDeployReport ( ) ;
Hashtable < FunctionalityReport , List < ServiceReport > > table = toConvert . getFunctionalityDeployingReport ( ) . getFunctionalityTable ( ) ;
HashMap < ClientFunctionalityReport , List < ClientServiceReport > > newTable = new HashMap < ClientFunctionalityReport , List < ClientServiceReport > > ( ) ;
//creating new hashtable
for ( FunctionalityReport fr : table . keySet ( ) ) {
List < ClientServiceReport > theList = new LinkedList < ClientServiceReport > ( ) ;
for ( ServiceReport sr : table . get ( fr ) )
theList . add ( new ClientServiceReport ( sr . getServiceName ( ) , sr . getServiceClass ( ) , sr . getServiceVersion ( ) ) ) ;
//adding new key and payload
newTable . put ( new ClientFunctionalityReport ( fr . getFunctionalityId ( ) , fr . getFunctionalityName ( ) , convStatus ( fr . getState ( ) ) ) , theList ) ;
}
cfDeployReport . setStatus ( convStatus ( toConvert . getFunctionalityDeployingReport ( ) . getStatus ( ) ) ) ;
cfDeployReport . setReportXML ( toConvert . getFunctionalityDeployingReport ( ) . getResourceManagerReport ( ) ) ;
cfDeployReport . setFunTable ( newTable ) ;
toReturn . setFunctionalityReport ( cfDeployReport ) ;
//*** Resource deploy report part
List < ClientResource > newResources = new LinkedList < ClientResource > ( ) ;
for ( Resource res : toConvert . getResourceDeployingReport ( ) . getResources ( ) ) {
newResources . add ( new ClientResource ( res . getResourceId ( ) , res . getResourceType ( ) , convStatus ( res . getStatus ( ) ) ) ) ;
}
toReturn . setResourcesReport ( new ClientResourcesDeployReport (
convStatus ( toConvert . getResourceDeployingReport ( ) . getStatus ( ) ) , newResources ) ) ;
return toReturn ;
}
/ * *
*
* @param status to convert
* @return
* /
private DeployStatus convStatus ( Status status ) {
switch ( status ) {
case Failed :
return DeployStatus . FAIL ;
case Finished :
return DeployStatus . FINISH ;
case Pending :
return DeployStatus . PENDING ;
case Running :
return DeployStatus . RUN ;
case Skipped :
return DeployStatus . SKIP ;
case Waiting :
return DeployStatus . WAIT ;
default :
return DeployStatus . FAIL ;
}
}
/ * *
*
* @param vreName
* @return
* /
private boolean vreExists ( String vreName ) {
GroupManager gm = new LiferayGroupManager ( ) ;
String currOrgid = " " + getASLSession ( ) . getGroupId ( ) ;
List < GroupModel > vres = null ;
try {
vres = gm . listSubGroupsByGroup ( currOrgid ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
}
for ( GroupModel vre : vres ) {
if ( vre . getGroupName ( ) . equals ( vreName ) )
return true ;
}
return false ;
}
/ * *
* Creates the community and its layout in Liferay
* /
2014-02-14 13:04:57 +01:00
private Organization createCommunityAndLayout ( String vreName ) {
2013-10-04 17:15:49 +02:00
if ( vreExists ( vreName ) ) {
System . out . println ( " VRE Exists already " ) ;
2014-02-14 13:04:57 +01:00
return null ;
2013-10-04 17:15:49 +02:00
}
log . info ( " TRYING READING CURRENT ORG ID " ) ;
long currOrgid = getASLSession ( ) . getGroupId ( ) ; //VO ID
String desc = ( getASLSession ( ) . getAttribute ( DESCRIPTION ) = = null ) ? " No Description found " : getASLSession ( ) . getAttribute ( DESCRIPTION ) . toString ( ) ; //desc
String designer = ( String ) getASLSession ( ) . getAttribute ( DESIGNER ) ;
log . info ( " Designer found Name : " + designer ) ;
String manager = ( String ) getASLSession ( ) . getAttribute ( MANAGER ) ;
System . out . println ( " Manager found Name : " + manager ) ;
OrganizationManagerImpl orgManager = OrganizationManagerImpl . getInstance ( getASLSession ( ) ) ;
try {
GCUBESiteLayout siteLayout = getBaseLayout ( vreName , orgManager , false ) ;
long groupModelid = orgManager . createVRE ( vreName , desc , currOrgid , siteLayout , OrganizationsUtil . getgCubeThemeId ( ThemesIdManager . GCUBE_LOGGEDIN_THEME ) ) ;
//the method above create a VRE and assign the manager Role to the person that triggers the creation
//however the VRE-Designer and the VRE-Manager persons of the VRE could be different and need to be created too
UserManager uman = new LiferayUserManager ( ) ;
2014-03-02 18:06:37 +01:00
2014-03-02 23:52:26 +01:00
2014-03-02 18:06:37 +01:00
2013-10-04 17:15:49 +02:00
//if the manager is not the one who triggered the creation
if ( manager . compareTo ( getASLSession ( ) . getUsername ( ) ) ! = 0 ) {
//add the role VRE-Manager
long uid = Long . parseLong ( uman . getUserId ( manager ) ) ;
2014-03-02 23:52:26 +01:00
Role created = createRole ( " VRE-Manager " , vreName , uid ) ;
2013-10-04 17:15:49 +02:00
log . debug ( " Admin Role " + created . getName ( ) + " Created Successfully " ) ;
2014-02-14 13:04:57 +01:00
Organization toReturn = OrganizationLocalServiceUtil . getOrganization ( groupModelid ) ;
Group vreCreated = toReturn . getGroup ( ) ;
2013-10-04 17:15:49 +02:00
uman . assignUserToGroup ( " " + vreCreated . getClassPK ( ) , " " + uid ) ;
log . debug ( " Added user " + manager + " to group " + vreCreated . getName ( ) + " with Success " ) ;
log . debug ( " Assigning Role: VRE-Manager " ) ;
RoleManager rm = new LiferayRoleManager ( ) ;
rm . assignRoleToUser ( " " + vreCreated . getClassPK ( ) , " " + created . getRoleId ( ) , " " + uid ) ;
2014-02-14 13:04:57 +01:00
log . debug ( " Admin Role VRE-Manager Associated to user " + designer + " .... returning ... " ) ;
return toReturn ;
2013-10-04 17:15:49 +02:00
}
//if the designer is different
if ( designer . compareTo ( manager ) ! = 0 ) {
//add the role VRE-Designer
long uid = Long . parseLong ( uman . getUserId ( designer ) ) ;
2014-03-02 23:52:26 +01:00
Role created = createRole ( " VRE-Designer " , vreName , uid ) ;
log . debug ( " Admin Role " + created . getName ( ) + " Created Successfully " ) ;
2013-10-04 17:15:49 +02:00
2014-02-14 13:04:57 +01:00
Organization toReturn = OrganizationLocalServiceUtil . getOrganization ( groupModelid ) ;
Group vreCreated = toReturn . getGroup ( ) ;
2013-10-04 17:15:49 +02:00
uman . assignUserToGroup ( " " + vreCreated . getClassPK ( ) , " " + uid ) ;
log . debug ( " Added user " + designer + " to group " + vreCreated . getName ( ) + " with Success " ) ;
RoleManager rm = new LiferayRoleManager ( ) ;
rm . assignRoleToUser ( " " + vreCreated . getClassPK ( ) , " " + created . getRoleId ( ) , " " + uid ) ;
log . debug ( " Admin Role VRE-Designer Associated to user " + designer + " .... returning ... " ) ;
2014-02-14 13:04:57 +01:00
return toReturn ;
2013-10-04 17:15:49 +02:00
}
} catch ( Exception e ) {
e . printStackTrace ( ) ;
2014-02-14 13:04:57 +01:00
return null ;
2013-10-04 17:15:49 +02:00
}
2014-02-14 13:04:57 +01:00
return null ;
2013-10-04 17:15:49 +02:00
}
/ * *
* Create a Regular Manager Role for the community
* @param vreName
* @return
* @throws PortalException
* @throws SystemException
* /
protected static Role createRole ( String roleName , String vreName , long userid ) {
try {
Company company = OrganizationsUtil . getCompany ( ) ;
String roletoAdd = roleName + " - " + vreName . replaceAll ( " " , " - " ) ;
Role toCreate = null ;
try {
toCreate = RoleLocalServiceUtil . getRole ( company . getCompanyId ( ) , roletoAdd ) ;
} catch ( NoSuchRoleException e ) {
log . debug ( " Adding Role: " + roletoAdd ) ;
return RoleLocalServiceUtil . addRole ( userid , company . getCompanyId ( ) , roletoAdd , null , roleName + " of " + vreName , LIFERAY_REGULAR_ROLE_ID ) ;
}
return toCreate ;
} catch ( PortalException e ) {
e . printStackTrace ( ) ;
} catch ( SystemException e ) {
e . printStackTrace ( ) ;
}
return null ;
}
/ * *
* CHECK IF THE VRE DEPLOYMENT IS FINISHED
* @param report
* @return
* /
private String getGlobalDeploymentStatus ( String report ) {
String ret = " NOT FINISHED " ;
return ret ;
}
/ * *
*
* @param profile
* @param xslFile
* @return
* /
private String transformToHtml ( String profile , String xslFile ) {
File stylesheet = new File ( xslFile ) ;
TransformerFactory tFactory = TransformerFactory . newInstance ( ) ;
StreamSource stylesource = new StreamSource ( stylesheet ) ;
Transformer transformer = null ;
try {
transformer = tFactory . newTransformer ( stylesource ) ;
} catch ( TransformerConfigurationException e ) {
e . printStackTrace ( ) ;
return " " ;
}
Document document = null ;
DocumentBuilderFactory factory = DocumentBuilderFactory . newInstance ( ) ;
DocumentBuilder builder = null ;
try {
builder = factory . newDocumentBuilder ( ) ;
} catch ( ParserConfigurationException e ) {
e . printStackTrace ( ) ;
return " " ;
}
StringReader reader = new StringReader ( profile ) ;
InputSource inputSource = new InputSource ( reader ) ;
log . debug ( " ***** --- Reading **** " ) ;
2013-10-04 18:40:33 +02:00
2013-10-04 17:15:49 +02:00
try {
document = builder . parse ( inputSource ) ;
} catch ( SAXException e ) {
log . error ( " ***** --- ERROR PARSING REPORT SAXException--- **** " ) ;
log . error ( " CHECK THIS: \ n " + profile ) ;
e . printStackTrace ( ) ;
return " " ;
} catch ( IOException e ) {
e . printStackTrace ( ) ;
return " " ;
}
DOMSource source = new DOMSource ( document ) ;
ByteArrayOutputStream resultStream = new ByteArrayOutputStream ( ) ;
StreamResult result = new StreamResult ( resultStream ) ;
try {
transformer . transform ( source , result ) ;
} catch ( TransformerException e ) {
e . printStackTrace ( ) ;
return " " ;
}
return resultStream . toString ( ) ;
}
/ * *
* simulate a report
* @return
* /
private DeployReport simulateReport ( ) {
DeployReport reportToReturn = new DeployReport ( ) ;
//
// Random random = new Random();
// int pick = random.nextInt(5);
//
// reportToReturn.setStatus(Status.Running);
//
// GHNonCloudReport cloudDeploy = new GHNonCloudReport();
// Status globalstatus;
// Status singlestatus;
//
// switch (pick) {
// case 0:
// cloudDeploy.setStatus(Status.Running);
// Status[] statuses = {Status.Failed,Status.Running, Status.Failed, Status.Failed, Status.Finished};
// cloudDeploy.setDeployingState(statuses);
//
// globalstatus = Status.Running;
// singlestatus = Status.Running;
// break;
// case 1:
// cloudDeploy.setStatus(Status.Waiting);
// Status[] status1 = {Status.Running, Status.Running, Status.Running, Status.Running, Status.Finished,
// Status.Failed,Status.Running, Status.Failed, Status.Failed, Status.Finished};
// cloudDeploy.setDeployingState(status1);
//
// globalstatus = Status.Finished;
// singlestatus = Status.Finished;
// break;
// case 2:
// cloudDeploy.setStatus(Status.Failed);
// Status[] status2 = {Status.Running, Status.Failed, Status.Failed, Status.Running, Status.Finished,
// Status.Failed,Status.Running, Status.Failed, Status.Failed, Status.Finished};
// cloudDeploy.setDeployingState(status2);
//
// globalstatus = Status.Failed;
// singlestatus = Status.Failed;
// break;
// case 3:
// cloudDeploy.setStatus(Status.Waiting);
// Status[] status3 = {Status.Running, Status.Running, Status.Running, Status.Waiting, Status.Waiting};
// cloudDeploy.setDeployingState(status3);
//
// globalstatus = Status.Waiting;
// singlestatus = Status.Running;
// case 4:
// cloudDeploy.setStatus(Status.Finished);
// Status[] status4 = {Status.Running, Status.Running, Status.Running, Status.Waiting, Status.Waiting};
// cloudDeploy.setDeployingState(status4);
//
// globalstatus = Status.Waiting;
// singlestatus = Status.Waiting;
// default:
// Status[] statusd = {Status.Skipped, Status.Skipped, Status.Skipped, Status.Skipped, Status.Skipped};
// cloudDeploy.setDeployingState(statusd);
//
// globalstatus = Status.Waiting;
// singlestatus = Status.Waiting;
// }
//
// reportToReturn.setCloudDeployingReport(cloudDeploy);
//
// ResourceDeployingReport rmdr = new ResourceDeployingReport();
// rmdr.setStatus(singlestatus);
//
// FunctionalityDeployingReport fdr = new FunctionalityDeployingReport();
//
// //creating func table
// Hashtable<FunctionalityReport, List<ServiceReport>> funtable = new Hashtable<FunctionalityReport, List<ServiceReport>>();
// for (int i = 0; i < 5; i++) {
// FunctionalityReport fr = new FunctionalityReport();
// fr.setFunctionalityId("0000");
// fr.setFunctionalityName("Search Potente");
// fr.setStatus(Status.Running);
//
// List<ServiceReport> sreports = new ArrayList<ServiceReport>();
//
// for (int j = 0; j < 7; j++) {
// ServiceReport sr = new ServiceReport();
// sr.setServiceClass("search");
// sr.setServiceName("ft indexer");
// sr.setServiceVersion("1.0");
// sreports.add(sr);
// }
// funtable.put(fr, sreports);
// }
//
// fdr.setFunctionalityTable(funtable);
// fdr.setStatus(Status.Running);
// fdr.setResourceManagerReport(null);
//
// reportToReturn.setFunctionalityDeployingReport(fdr);
// reportToReturn.setStatus(globalstatus);
return reportToReturn ;
}
/ * *
*
* @param path
* @return
* /
private String fileToString ( String path ) {
BufferedReader filebuf = null ;
String nextStr = null ;
StringBuilder ret = new StringBuilder ( ) ;
try {
filebuf = new BufferedReader ( new FileReader ( path ) ) ;
nextStr = filebuf . readLine ( ) ; // Read a line from file
while ( nextStr ! = null ) {
ret . append ( nextStr ) ;
nextStr = filebuf . readLine ( ) ; // Read the next line
}
filebuf . close ( ) ; // close the file
} catch ( FileNotFoundException e ) {
e . printStackTrace ( ) ;
} catch ( IOException e1 ) {
e1 . printStackTrace ( ) ;
}
return ret . toString ( ) ;
}
/ * *
*
* @return the built layout of a rootVO
* @throws SystemException .
* @throws PortalException .
* /
public GCUBESiteLayout getBaseLayout ( String voName , OrganizationManagerImpl orgManager , boolean isVO ) throws PortalException , SystemException {
GCUBESiteLayout siteLayout = null ;
String email = OrganizationManagerImpl . validateUser ( getASLSession ( ) . getUsername ( ) ) . getEmailAddress ( ) ;
siteLayout = new GCUBESiteLayout ( OrganizationManagerImpl . getCompany ( ) , voName , email ) ;
2014-03-02 18:06:37 +01:00
siteLayout . addTab ( new GCUBELayoutTab ( voName , GCUBELayoutType . ONE_COL ,
2013-10-04 17:15:49 +02:00
new GCUBEPortlet ( " gCube Loggedin " , PortletsIdManager . getLRPortletId ( PortletsIdManager . GCUBE_LOGGEDIN ) ) ) ) ;
//create tab Users and Roles with 2 subtabs
GCUBELayoutTab usersAndRoles = new GCUBELayoutTab ( " Administration " , GCUBELayoutType . ONE_COL ,
new GCUBEPortlet ( " Navigation " , PortletsIdManager . getLRPortletId ( PortletsIdManager . LR_NAVIGATION ) ) ) ;
2014-03-02 18:06:37 +01:00
GCUBELayoutTab usersTab = new GCUBELayoutTab ( " Manage User and Requests " , GCUBELayoutType . ONE_COL ,
2013-10-04 17:15:49 +02:00
new GCUBEPortlet ( " Users " , PortletsIdManager . getLRPortletId ( PortletsIdManager . GCUBE_USERS_MANAGE ) ) ) ;
2014-03-02 18:06:37 +01:00
GCUBELayoutTab usersAddTab = new GCUBELayoutTab ( " Add new Users " , GCUBELayoutType . ONE_COL ,
new GCUBEPortlet ( " Users " , PortletsIdManager . getLRPortletId ( PortletsIdManager . GCUBE_ADD_USERS_MANAGE ) ) ) ;
GCUBELayoutTab rolesTab = new GCUBELayoutTab ( " Add new Roles " , GCUBELayoutType . ONE_COL ,
2013-10-04 17:15:49 +02:00
new GCUBEPortlet ( " Roles " , PortletsIdManager . getLRPortletId ( PortletsIdManager . GCUBE_ROLES_MANAGE ) ) ) ;
usersAndRoles . addSubTab ( usersTab ) ;
2014-03-02 18:06:37 +01:00
usersAndRoles . addSubTab ( usersAddTab ) ;
2013-10-04 17:15:49 +02:00
usersAndRoles . addSubTab ( rolesTab ) ;
//add the tab
siteLayout . addTab ( usersAndRoles ) ;
if ( isVO )
siteLayout . addTab ( new GCUBELayoutTab ( " Resources Management " , GCUBELayoutType . ONE_COL ,
new GCUBEPortlet ( " Resources Management " , PortletsIdManager . getLRPortletId ( PortletsIdManager . RESOURCES_MANAGEMENT ) ) ) ) ;
else
2014-03-02 18:06:37 +01:00
siteLayout . addTab ( new GCUBELayoutTab ( " Calendar " , GCUBELayoutType . ONE_COL ,
2014-03-02 23:52:26 +01:00
new GCUBEPortlet ( " Calendar " , PortletsIdManager . getLRPortletId ( PortletsIdManager . LR_CALENDAR ) ) , true ) ) ;
2013-10-04 17:15:49 +02:00
return siteLayout ;
}
}