Package org.drools.repository.migration

Source Code of org.drools.repository.migration.MigrateDroolsPackage

/**
* Copyright 2010 JBoss Inc
*
* 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 org.drools.repository.migration;

import javax.jcr.Node;
import javax.jcr.RepositoryException;

import org.drools.repository.AssetItem;
import org.drools.repository.PackageItem;
import org.drools.repository.PackageIterator;
import org.drools.repository.RulesRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* This is a one time class which will be used to migrate package header info for drools.
* Only needed for drools version 4 repositories.
* @author Michael Neale
*/
public class MigrateDroolsPackage {

  private final Logger log = LoggerFactory.getLogger(this.getClass());
  public boolean needsMigration(RulesRepository repo) throws RepositoryException {
    Node root = repo.getSession().getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME);
    return !root.hasNode("drools.package.migrated");
  }

  public void migrate(RulesRepository repo) throws RepositoryException {
    log.info("AUTO MIGRATION: Performing drools.package migration...");
      PackageIterator pkgs = repo.listPackages();
      boolean performed = false;
      while(pkgs.hasNext()) {
        performed = true;
        PackageItem pkg = (PackageItem) pkgs.next();
        migratePackage(pkg);

        String[] snaps = repo.listPackageSnapshots(pkg.getName());
        if (snaps != null) {
          for (int i = 0; i < snaps.length; i++) {
            PackageItem snap = repo.loadPackageSnapshot(pkg.getName(), snaps[i]);
            migratePackage(snap);
        }
        }
      }



      if (performed) {
        repo.getSession().getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME).addNode("drools.package.migrated", "nt:folder");
        repo.save();
        log.info("AUTO MIGRATION: drools.package migration completed.");
      }
  }

  private void migratePackage(PackageItem pkg) {
    if (!pkg.containsAsset("drools")) {
      AssetItem asset = pkg.addAsset("drools", "");
      asset.updateFormat("package");
      asset.updateContent(pkg.getStringProperty(PackageItem.HEADER_PROPERTY_NAME));
      asset.checkin("");
    }
  }


}
TOP

Related Classes of org.drools.repository.migration.MigrateDroolsPackage

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.