/**
* Copyright (C) 2015 Envidatec GmbH <info@envidatec.com>
*
* This file is part of JEWebService.
*
* JECommons is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation in version 3.
*
* JECommons is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* JEWebService. If not, see <http://www.gnu.org/licenses/>.
*
* JECommons is part of the OpenJEVis project, further project information are
* published at <http://www.OpenJEVis.org/>.
*/
package org.jevis.commons.userregistration;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.measure.unit.NonSI;
import javax.measure.unit.SI;
import org.jevis.api.JEVisAttribute;
import org.jevis.api.JEVisConstants;
import org.jevis.api.JEVisDataSource;
import org.jevis.api.JEVisException;
import org.jevis.api.JEVisObject;
import org.jevis.api.JEVisSample;
import org.jevis.api.JEVisUnit;
import org.jevis.commons.relationship.RelationshipFactory;
import org.jevis.commons.unit.JEVisUnitImp;
import org.joda.time.DateTime;
/**
*
* @author Florian Simon <florian.simon@envidatec.com>
*/
public class UserFactory {
/**
* Very basic implementaion of an factory to create an default demo user
*
* @TODO implement an rollback function
* @TODO use some public static names for the classes and types
* @TODO add dataprocessing
* @TODO check if user exists allready
*
* @param ds
* @param parentOrgaDir
* @param username
* @param password
* @param email
* @param firstName
* @param lastName
* @param orgaNmae
* @param demoGroups
* @return
*/
public static boolean buildMobileDemoStructure(JEVisDataSource ds, JEVisObject parentOrgaDir, String username, String password, String email, String firstName, String lastName, String orgaNmae, List<JEVisObject> demoGroups) {
try {
//Create Organization
JEVisObject myNewOrganisation = parentOrgaDir.buildObject(orgaNmae, ds.getJEVisClass("Organization"));
//Create Administration Dir
JEVisObject adminDir = myNewOrganisation.buildObject("Administration Directory", ds.getJEVisClass("Administration Directory"));
//Create User Dir
JEVisObject userDir = adminDir.buildObject("User Directory", ds.getJEVisClass("User Directory"));
JEVisObject user = userDir.buildObject(username, ds.getJEVisClass("User"));
JEVisAttribute passAtt = user.getAttribute("Password");
JEVisSample ps = passAtt.buildSample(new DateTime(), password);
ps.commit();
JEVisAttribute userEnabledAtt = user.getAttribute("Enabled");
JEVisSample enable = userEnabledAtt.buildSample(new DateTime(), true);
enable.commit();
JEVisAttribute firstname = user.getAttribute("First Name");
JEVisSample firstnameSample = firstname.buildSample(new DateTime(), firstName);
firstnameSample.commit();
JEVisAttribute lastname = user.getAttribute("Last Name");
JEVisSample lastnameSample = lastname.buildSample(new DateTime(), lastName);
lastnameSample.commit();
JEVisAttribute emailOIbj = user.getAttribute("E-Mail");
JEVisSample emaiLSample = emailOIbj.buildSample(new DateTime(), email);
emaiLSample.commit();
//Create Group dir
//-- Put User to group
//-- Set Root
JEVisObject groupDir = adminDir.buildObject("Group Directory", ds.getJEVisClass("Group Directory"));
JEVisObject group = groupDir.buildObject("My Group", ds.getJEVisClass("Group"));
//-- enable
//-- setPW
//Create Monitored Object Directory
JEVisObject monitoredObjectDir = myNewOrganisation.buildObject("Monitored Object Directory", ds.getJEVisClass("Monitored Object Directory"));
//Create Building Dir
JEVisObject building = monitoredObjectDir.buildObject("My Building", ds.getJEVisClass("Building"));
//Create Data Dir
//ToDo Set Unit
JEVisObject dataDir = building.buildObject("Data Directory", ds.getJEVisClass("Data Directory"));
JEVisObject dataElectric = dataDir.buildObject("Electricity Main Meter", ds.getJEVisClass("Data"));
JEVisObject dataHeat = dataDir.buildObject("Heat Main Meter", ds.getJEVisClass("Data"));
JEVisObject dataOutdoor = dataDir.buildObject("Outdoor Temperature", ds.getJEVisClass("Data"));
JEVisObject dataWater = dataDir.buildObject("Water Main Meter", ds.getJEVisClass("Data"));
// JEVisObject dpEl = dataElectric.buildObject("Transformer", ds.getJEVisClass("Data Processor"));
// JEVisAttribute taskEl = dpEl.getAttribute("Task Description");
// JEVisSample taskSampleEl = taskEl.buildSample(new DateTime(), buildComulativProcessor(dataElectric));
// taskSampleEl.commit();
//
// JEVisObject dpHeat = dataHeat.buildObject("Transformer", ds.getJEVisClass("Data Processor"));
// JEVisAttribute taskHeat = dpHeat.getAttribute("Task Description");
// JEVisSample taskSampleHeat = taskHeat.buildSample(new DateTime(), buildComulativProcessor(dataHeat));
// taskSampleHeat.commit();
//
// JEVisObject spWater = dataWater.buildObject("Transformer", ds.getJEVisClass("Data Processor"));
// JEVisAttribute taskWater = spWater.getAttribute("Task Description");
// JEVisSample taskSampleWater = taskWater.buildSample(new DateTime(), buildComulativProcessor(dataWater));
// taskSampleWater.commit();
//Set Units
dataOutdoor.getAttribute("Value").setInputUnit(new JEVisUnitImp(SI.CELSIUS));
dataOutdoor.getAttribute("Value").setDisplayUnit(new JEVisUnitImp(SI.CELSIUS));
dataOutdoor.commit();
dataElectric.getAttribute("Value").setInputUnit(new JEVisUnitImp(SI.WATT.times(NonSI.HOUR), "Wh", JEVisUnit.Prefix.KILO));
dataElectric.getAttribute("Value").setDisplayUnit(new JEVisUnitImp(SI.WATT.times(NonSI.HOUR), "Wh", JEVisUnit.Prefix.KILO));
dataElectric.commit();
dataHeat.getAttribute("Value").setInputUnit(new JEVisUnitImp(SI.WATT.times(NonSI.HOUR), "Wh", JEVisUnit.Prefix.KILO));
dataHeat.getAttribute("Value").setDisplayUnit(new JEVisUnitImp(SI.WATT.times(NonSI.HOUR), "Wh", JEVisUnit.Prefix.KILO));
dataHeat.commit();
dataWater.getAttribute("Value").setInputUnit(new JEVisUnitImp(SI.CUBIC_METRE));
dataWater.getAttribute("Value").setDisplayUnit(new JEVisUnitImp(SI.CUBIC_METRE));
dataWater.commit();
//Add the Userrights
RelationshipFactory.buildOwnership(group, myNewOrganisation, true);
RelationshipFactory.buildMembership(group, user, JEVisConstants.ObjectRelationship.MEMBER_READ);
RelationshipFactory.buildMembership(group, user, JEVisConstants.ObjectRelationship.MEMBER_WRITE);
RelationshipFactory.buildRoot(group, myNewOrganisation);
for (JEVisObject demoObj : demoGroups) {
RelationshipFactory.buildMembership(demoObj, user, JEVisConstants.ObjectRelationship.MEMBER_READ);
}
return true;
} catch (JEVisException ex) {
Logger.getLogger(UserFactory.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
private static String buildComulativProcessor(JEVisObject obj) {
return "\"processor\":\"Counter Processor\",\"options\":{},\"tasks\":[{\"processor\":\"Input\",\"options\":{\"attribute-id\":\"Value\",\"object-id\":\"" + obj.getID() + "\"},\"tasks\":[],\"id\":\"Import\"}],\"id\":\"Diff\"}";
}
}