Package com.baasbox.db

Source Code of com.baasbox.db.Evolution_0_7_4

/*
* Copyright (c) 2014.
*
* BaasBox - info-at-baasbox.com
*
* Licensed 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 com.baasbox.db;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import play.Logger;

import com.baasbox.configuration.Internal;
import com.baasbox.dao.IndexDao;
import com.baasbox.dao.PermissionsHelper;
import com.baasbox.dao.RoleDao;
import com.baasbox.dao.UserDao;
import com.baasbox.dao.exception.SqlInjectionException;
import com.baasbox.enumerations.DefaultRoles;
import com.baasbox.service.user.RoleService;
import com.baasbox.service.user.UserService;
import com.baasbox.util.QueryParams;
import com.google.common.collect.Lists;
import com.orientechnologies.orient.core.db.ODatabase;
import com.orientechnologies.orient.core.db.ODatabase.ATTRIBUTES;
import com.orientechnologies.orient.core.db.ODatabaseComplex;
import com.orientechnologies.orient.core.db.record.ODatabaseRecordTx;
import com.orientechnologies.orient.core.id.ORID;
import com.orientechnologies.orient.core.index.OIndex;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OClass.INDEX_TYPE;
import com.orientechnologies.orient.core.metadata.schema.OProperty;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.metadata.security.ODatabaseSecurityResources;
import com.orientechnologies.orient.core.metadata.security.ORole;
import com.orientechnologies.orient.core.record.ORecord;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.OCommandSQL;

/**
* Evolves the DB to the 0.7.3 schema
* introducing the "File"s
*
* @author Claudio Tesoriero
*
*/
public class Evolution_0_7_4 implements IEvolution {
  private String version="0.7.4-snapshot";
 
  public Evolution_0_7_4() {}

  @Override
  public String getFinalVersion() {
    return version;
  }

  @Override
  public void evolve(ODatabaseRecordTx db) {
    Logger.info ("Applying evolutions to evolve to the " + version + " level");
    try{
      changePushTokenFieldName(db);
      addProfileSections(db);
    }catch (Throwable e){
      Logger.error("Error applying evolution to " + version + " level!!" ,e);
      throw new RuntimeException(e);
    }
    Logger.info ("DB now is on " + version + " level");
  }
 
  private void changePushTokenFieldName(ODatabaseRecordTx db)  {
    Logger.info("..changing 'deviceId' to 'pushToken' field name..:");
    UserDao dao = UserDao.getInstance();
    QueryParams criteria = QueryParams.getInstance();
    try {
      List<ODocument> users = UserService.getUsers(criteria);
      for (ODocument user:users){
        ODocument userSystemProperties = user.field(UserDao.ATTRIBUTES_SYSTEM);
        if (userSystemProperties!=null){
          List<ODocument> loginInfos=userSystemProperties.field(UserDao.USER_LOGIN_INFO);
          for(ODocument loginInfo : loginInfos){
            String deviceId=loginInfo.field("deviceId");
            loginInfo.field(UserDao.USER_PUSH_TOKEN, deviceId);
            loginInfo.save();
          }
          userSystemProperties.save();
        }
        user.save();
      }
    } catch (SqlInjectionException e) {
      throw new RuntimeException(e);
    }
    Logger.info("...done...");
  }
   
  private void addProfileSections(ODatabaseRecordTx db) {
    Logger.info("...adding missing profile section..:");
    UserDao dao = UserDao.getInstance();
    QueryParams criteria = QueryParams.getInstance();
    try {
      List<ODocument> users = UserService.getUsers(criteria);
      Logger.info(" found " + users.size() + " users");
      for (ODocument user:users){
          ORID userRid = ((ODocument)user.field("user")).getIdentity();
        ODocument anonymousSection = user.field(UserDao.ATTRIBUTES_VISIBLE_BY_ANONYMOUS_USER);
        ODocument registeredSection = user.field(UserDao.ATTRIBUTES_VISIBLE_BY_REGISTERED_USER);
        ODocument privateSection = user.field(UserDao.ATTRIBUTES_VISIBLE_ONLY_BY_THE_USER);
        ODocument friendsSection = user.field(UserDao.ATTRIBUTES_VISIBLE_BY_FRIENDS_USER);
       
        if (anonymousSection==null){
          ODocument attrObj = new ODocument(dao.USER_ATTRIBUTES_CLASS);
          attrObj.fromJSON("{}");
                    PermissionsHelper.grantRead(attrObj, RoleDao.getRole(DefaultRoles.ANONYMOUS_USER.toString()));       
                    PermissionsHelper.changeOwner(attrObj,userRid );
                    user.field(dao.ATTRIBUTES_VISIBLE_BY_ANONYMOUS_USER,attrObj);
                    attrObj.save();
        }
       
        if (registeredSection==null){
          ODocument attrObj = new ODocument(dao.USER_ATTRIBUTES_CLASS);
          attrObj.fromJSON("{}");
          PermissionsHelper.grantRead(attrObj, RoleDao.getRole(DefaultRoles.REGISTERED_USER.toString()));      
                  PermissionsHelper.changeOwner(attrObj, userRid);
                  user.field(dao.ATTRIBUTES_VISIBLE_BY_REGISTERED_USER, attrObj);
                    attrObj.save();
        }

        if (privateSection==null){
          ODocument attrObj = new ODocument(dao.USER_ATTRIBUTES_CLASS);
          attrObj.fromJSON("{}");
                    user.field(dao.ATTRIBUTES_VISIBLE_ONLY_BY_THE_USER, attrObj);
                    PermissionsHelper.changeOwner(attrObj, userRid);                                       
                    attrObj.save();
        }       
       
        if (friendsSection==null){
          ODocument attrObj = new ODocument(dao.USER_ATTRIBUTES_CLASS);
          attrObj.fromJSON("{}");
          PermissionsHelper.grantRead(attrObj, RoleDao.getFriendRole(user));                               
            PermissionsHelper.changeOwner(attrObj, userRid);
            user.field(dao.ATTRIBUTES_VISIBLE_BY_FRIENDS_USER, attrObj);
            attrObj.save();
        }
       
      }
    }catch (SqlInjectionException e) {
      throw new RuntimeException(e);
    }
    Logger.info("...done...");
  }



}
TOP

Related Classes of com.baasbox.db.Evolution_0_7_4

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.