diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/DeviceManagementConstants.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/DeviceManagementConstants.java index 5e63acb960..5e63430d41 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/DeviceManagementConstants.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/DeviceManagementConstants.java @@ -81,5 +81,6 @@ public final class DeviceManagementConstants { public static final String VALID_FROM = "overview_validityFrom"; public static final String VALID_TO = "overview_validityTo"; public static final String LICENSE = "overview_license"; + public static final String LICENSE_REGISTRY_KEY = "license"; } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml index a6087eb0d3..952b316a5d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml @@ -72,7 +72,8 @@ org.wso2.carbon.device.mgt.common.*, org.wso2.carbon.user.api, org.wso2.carbon.user.core.*, - org.w3c.dom + org.w3c.dom, + javax.xml.namespace.*; !org.wso2.carbon.device.mgt.core.internal, diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementConstants.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementConstants.java index 8af1724de7..ee84a217cf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementConstants.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementConstants.java @@ -22,6 +22,7 @@ public final class DeviceManagementConstants { throw new AssertionError(); } public static final String PROPERTY_SETUP = "setup"; + public static final String DEFAULT_LICENSE_CONFIG_XML_NAME = "DefaultLicense.xml"; } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/LicenseConfigurationManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/LicenseConfigurationManager.java new file mode 100644 index 0000000000..2995c6b14f --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/LicenseConfigurationManager.java @@ -0,0 +1,73 @@ +/* + * + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.wso2.carbon.device.mgt.core.config; + +import org.w3c.dom.Document; +import org.wso2.carbon.device.mgt.common.LicenseManagementException; +import org.wso2.carbon.device.mgt.core.DeviceManagementConstants; +import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; +import org.wso2.carbon.utils.CarbonUtils; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import java.io.File; + +public class LicenseConfigurationManager { + + private LicenseManagementConfig licenseMgtConfig; + private static LicenseConfigurationManager licenseConfigManager; + + private static final String licenseMgtConfigXMLPath = CarbonUtils.getCarbonConfigDirPath() + File.separator + + DeviceManagementConstants.Common.DEFAULT_LICENSE_CONFIG_XML_NAME; + + public static LicenseConfigurationManager getInstance() { + if (licenseConfigManager == null) { + synchronized (LicenseConfigurationManager.class) { + if (licenseConfigManager == null) { + licenseConfigManager = new LicenseConfigurationManager(); + } + } + } + return licenseConfigManager; + } + + public synchronized void initConfig() throws LicenseManagementException { + + //catch generic exception.if any exception occurs wrap and throw LicenseManagementException + try { + File licenseMgtConfig = new File(licenseMgtConfigXMLPath); + Document doc = DeviceManagerUtil.convertToDocument(licenseMgtConfig); + + /* Un-marshaling License Management configuration */ + JAXBContext cdmContext = JAXBContext.newInstance(LicenseManagementConfig.class); + Unmarshaller unmarshaller = cdmContext.createUnmarshaller(); + this.licenseMgtConfig = (LicenseManagementConfig) unmarshaller.unmarshal(doc); + } catch (Exception e) { + throw new LicenseManagementException("Error occurred while initializing RSS config", e); + } + } + + public LicenseManagementConfig getLicenseMgtConfig() { + return licenseMgtConfig; + } + + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/LicenseManagementConfig.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/LicenseManagementConfig.java new file mode 100644 index 0000000000..dc61771e7f --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/LicenseManagementConfig.java @@ -0,0 +1,41 @@ +/* + * + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.wso2.carbon.device.mgt.core.config; + +import org.wso2.carbon.device.mgt.core.config.license.License; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@XmlRootElement(name = "DefaultLicense") +public class LicenseManagementConfig { + + private List licenseList; + + @XmlElement(name = "License") + public List getLicenseList() { + return licenseList; + } + + public void setLicenseList(List licenseList) { + this.licenseList = licenseList; + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/license/License.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/license/License.java new file mode 100644 index 0000000000..1ad70a3952 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/license/License.java @@ -0,0 +1,104 @@ +/* + * + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.wso2.carbon.device.mgt.core.config.license; + +import org.wso2.carbon.device.mgt.core.util.DateAdapter; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import java.util.Date; + +@XmlRootElement(name = "License") +public class License { + + private String provider; + private String name; + private String version; + private String language; + private Date validFrom; + private Date validTo; + private String license; + + @XmlElement(name = "provider") + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + @XmlElement(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @XmlElement(name = "version") + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + @XmlElement(name = "language") + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + @XmlJavaTypeAdapter(DateAdapter.class) + public Date getValidFrom() { + return validFrom; + } + + public void setValidFrom(Date validFrom) { + this.validFrom = validFrom; + } + + @XmlJavaTypeAdapter(DateAdapter.class) + public Date getValidTo() { + return validTo; + } + + public void setValidTo(Date validTo) { + this.validTo = validTo; + } + + @XmlElement(name = "license") + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/LicenseManagementServiceComponent.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/LicenseManagementServiceComponent.java index b1316eff5c..3fd0ad6acc 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/LicenseManagementServiceComponent.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/LicenseManagementServiceComponent.java @@ -22,11 +22,27 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; +import org.wso2.carbon.base.MultitenantConstants; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.context.RegistryType; +import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; +import org.wso2.carbon.device.mgt.common.LicenseManagementException; import org.wso2.carbon.device.mgt.core.LicenseManager; import org.wso2.carbon.device.mgt.core.LicenseManagerImpl; +import org.wso2.carbon.device.mgt.core.config.LicenseConfigurationManager; +import org.wso2.carbon.device.mgt.core.config.LicenseManagementConfig; import org.wso2.carbon.device.mgt.core.service.LicenseManagementService; +import org.wso2.carbon.governance.api.exception.GovernanceException; +import org.wso2.carbon.governance.api.generic.GenericArtifactManager; +import org.wso2.carbon.governance.api.generic.dataobjects.GenericArtifact; +import org.wso2.carbon.registry.core.Registry; +import org.wso2.carbon.registry.core.exceptions.RegistryException; +import org.wso2.carbon.registry.core.service.RegistryService; +import org.wso2.carbon.registry.core.session.UserRegistry; import org.wso2.carbon.user.core.service.RealmService; +import javax.xml.namespace.QName; + /** * @scr.component name="org.wso2.carbon.license.manager" immediate="true" * @scr.reference name="user.realmservice.default" @@ -35,6 +51,9 @@ import org.wso2.carbon.user.core.service.RealmService; * policy="dynamic" * bind="setRealmService" * unbind="unsetRealmService" + * @scr.reference name="registryService.service" + * interface="org.wso2.carbon.registry.core.service.RegistryService" cardinality="1..1" + * policy="dynamic" bind="setRegistryService" unbind="unsetRegistryService" */ public class LicenseManagementServiceComponent { @@ -42,19 +61,83 @@ public class LicenseManagementServiceComponent { protected void activate(ComponentContext componentContext) { - if (log.isDebugEnabled()) { - log.debug("Initializing license management core bundle"); - } - LicenseManager licenseManager = new LicenseManagerImpl(); - LicenseManagementDataHolder.getInstance().setLicenseManager(licenseManager); + try { + if (log.isDebugEnabled()) { + log.debug("Initializing license management core bundle"); + } + LicenseManager licenseManager = new LicenseManagerImpl(); + LicenseManagementDataHolder.getInstance().setLicenseManager(licenseManager); - if (log.isDebugEnabled()) { - log.debug("Registering OSGi service LicenseManagementService"); + /* If -Dsetup option enabled then create creates default license management */ + String setupOption = System.getProperty( + org.wso2.carbon.device.mgt.core.DeviceManagementConstants.Common.PROPERTY_SETUP); + + if (setupOption != null) { + if (log.isDebugEnabled()) { + log.debug("-Dsetup is enabled.Check default licenses and add if not exists in registry"); + } + LicenseConfigurationManager.getInstance().initConfig(); + LicenseManagementConfig licenseManagementConfig = LicenseConfigurationManager.getInstance() + .getLicenseMgtConfig(); + addDefaultLicenses(licenseManagementConfig); + } + + if (log.isDebugEnabled()) { + log.debug("Registering OSGi service LicenseManagementService"); + } + BundleContext bundleContext = componentContext.getBundleContext(); + bundleContext + .registerService(LicenseManagementService.class.getName(), new LicenseManagementService(), null); + if (log.isDebugEnabled()) { + log.debug("License management core bundle has been successfully initialized"); + } + } catch (Throwable throwable) { + String msg = "Error occurred while initializing license management core bundle"; + log.error(msg, throwable); } - BundleContext bundleContext = componentContext.getBundleContext(); - bundleContext.registerService(LicenseManagementService.class.getName(), new LicenseManagementService(), null); - if (log.isDebugEnabled()) { - log.debug("License management core bundle has been successfully initialized"); + } + + private void addDefaultLicenses(LicenseManagementConfig licenseManagementConfig) throws LicenseManagementException { + + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername("admin"); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); + PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain( + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); + + Registry registry = (UserRegistry) PrivilegedCarbonContext.getThreadLocalCarbonContext().getRegistry( + RegistryType.USER_GOVERNANCE); + try { + GenericArtifactManager artifactManager = new GenericArtifactManager(registry, + DeviceManagementConstants.LicenseProperties.LICENSE_REGISTRY_KEY); + GenericArtifact artifact; + + for (org.wso2.carbon.device.mgt.core.config.license.License license : licenseManagementConfig + .getLicenseList()) { + + artifact = artifactManager.newGovernanceArtifact(new QName("http://www.wso2.com", + DeviceManagementConstants.LicenseProperties.LICENSE_REGISTRY_KEY)); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.OVERVIEW_NAME, license.getName()); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.OVERVIEW_VERSION, + license.getVersion()); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.OVERVIEW_LANGUAGE, + license.getLanguage()); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.OVERVIEW_PROVIDER, + license.getProvider()); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.VALID_TO, + license.getValidTo().toString()); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.VALID_FROM, + license.getValidFrom().toString()); + artifact.setAttribute(DeviceManagementConstants.LicenseProperties.LICENSE,license.getLicense()); + artifactManager.addGenericArtifact(artifact); + } + } catch (GovernanceException govEx) { + String errorMsg = "Governance error"; + log.error(errorMsg); + throw new LicenseManagementException(errorMsg, govEx); + } catch (RegistryException regEx) { + String errorMsg = "Registry error"; + throw new LicenseManagementException(errorMsg, regEx); } } @@ -79,4 +162,12 @@ public class LicenseManagementServiceComponent { } LicenseManagementDataHolder.getInstance().setRealmService(null); } + + protected void setRegistryService(RegistryService registryService) { + // CommonUtil.setRegistryService(registryService); + } + + protected void unsetRegistryService(RegistryService registryService) { + //CommonUtil.setRegistryService(null); + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DateAdapter.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DateAdapter.java new file mode 100644 index 0000000000..246852c80d --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DateAdapter.java @@ -0,0 +1,40 @@ +/* + * + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.wso2.carbon.device.mgt.core.util; + +import javax.xml.bind.annotation.adapters.XmlAdapter; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateAdapter extends XmlAdapter { + + private SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy"); + + @Override + public Date unmarshal(String strDate) throws ParseException { + return dateFormat.parse(strDate); + } + @Override + public String marshal(Date date) throws ParseException { + return dateFormat.format(date); + } +}