Package org.bladerunnerjs.aliasing.aliases

Source Code of org.bladerunnerjs.aliasing.aliases.AliasesFile

package org.bladerunnerjs.aliasing.aliases;

import java.io.File;
import java.util.List;

import org.bladerunnerjs.aliasing.AliasDefinition;
import org.bladerunnerjs.aliasing.AliasException;
import org.bladerunnerjs.aliasing.AliasOverride;
import org.bladerunnerjs.aliasing.AmbiguousAliasException;
import org.bladerunnerjs.aliasing.UnresolvableAliasException;
import org.bladerunnerjs.aliasing.aliasdefinitions.AliasDefinitionsFile;
import org.bladerunnerjs.model.BundlableNode;
import org.bladerunnerjs.model.exception.request.ContentFileProcessingException;

public class AliasesFile {
  public static final String BR_UNKNOWN_CLASS_NAME = "br.UnknownClass";
 
  private final File file;
  private final BundlableNode bundlableNode;
  private final PersistentAliasesData persistentAliasesData;
 
  public AliasesFile(File parent, String child, BundlableNode bundlableNode) {
    this.bundlableNode = bundlableNode;
    file = new File(parent, child);
    persistentAliasesData = new PersistentAliasesData(bundlableNode.root(), file);
  }
 
  public File getUnderlyingFile() {
    return file;
  }
 
  public String scenarioName() throws ContentFileProcessingException {
    return persistentAliasesData.getData().scenario;
  }
 
  public void setScenarioName(String scenarioName) throws ContentFileProcessingException {
    persistentAliasesData.getData().scenario = scenarioName;
  }
 
  public List<String> groupNames() throws ContentFileProcessingException {
    return persistentAliasesData.getData().groupNames;
  }
 
  public void setGroupNames(List<String> groupNames) throws ContentFileProcessingException {
    persistentAliasesData.getData().groupNames = groupNames;
  }
 
  public List<AliasOverride> aliasOverrides() throws ContentFileProcessingException {
    return persistentAliasesData.getData().aliasOverrides;
  }
 
  public void addAlias(AliasOverride aliasOverride) throws ContentFileProcessingException {
    List<AliasOverride> aliasOverrides = aliasOverrides();
    aliasOverrides.add(aliasOverride);
    persistentAliasesData.getData().aliasOverrides = aliasOverrides;
  }
 
  public AliasDefinition getAlias(String aliasName) throws AliasException, ContentFileProcessingException {
    AliasOverride aliasOverride = getLocalAliasOverride(aliasName);
    AliasDefinition aliasDefinition = getAliasDefinition(aliasName);
    AliasOverride groupAliasOverride = getGroupAliasOverride(aliasName);
   
    if ((aliasOverride == null) && (groupAliasOverride != null)) {
      aliasOverride = groupAliasOverride;
    }
   
    if((aliasDefinition == null) && (aliasOverride == null)) {
      throw new UnresolvableAliasException(this, aliasName);
    }
   
    if(aliasDefinition == null) {
      aliasDefinition = new AliasDefinition(aliasOverride.getName(), aliasOverride.getClassName(), null);
    }
    else if(aliasOverride != null) {
      aliasDefinition = new AliasDefinition(aliasOverride.getName(), aliasOverride.getClassName(), aliasDefinition.getInterfaceName());
    }
   
    if((aliasDefinition.getClassName() == null)) {
      aliasDefinition = new AliasDefinition(aliasDefinition.getName(), BR_UNKNOWN_CLASS_NAME, aliasDefinition.getInterfaceName());
    }
   
    return aliasDefinition;
  }
 
  public boolean hasAlias(String aliasName) throws ContentFileProcessingException {
    boolean hasAlias = true;
   
    try {
      getAlias(aliasName);
    }
    catch (AliasException e) {
      hasAlias = false;
    }
    catch (ContentFileProcessingException e) {
      throw e;
    }
   
    return hasAlias;
  }
 
  public AliasDefinition getAliasDefinition(String aliasName) throws ContentFileProcessingException, AliasException {
    AliasDefinition aliasDefinition = null;
    String scenarioName = scenarioName();
    List<String> groupNames = groupNames();
   
    for(AliasDefinitionsFile aliasDefinitionsFile : bundlableNode.aliasDefinitionFiles()) {
      AliasDefinition nextAliasDefinition = aliasDefinitionsFile.getAliasDefinition(aliasName, scenarioName, groupNames);

      if (nextAliasDefinition != null)
      {         
          if (aliasDefinition != null && nextAliasDefinition != null) {
            throw new AmbiguousAliasException(getUnderlyingFile(), aliasName, scenarioName);
          }
     
        aliasDefinition = nextAliasDefinition;
      }
    }
   
    return aliasDefinition;
  }
 
  public void write() throws ContentFileProcessingException {
    persistentAliasesData.writeData();
  }
 
  private AliasOverride getLocalAliasOverride(String aliasName) throws ContentFileProcessingException {
    AliasOverride aliasOverride = null;
   
    for(AliasOverride nextAliasOverride : aliasOverrides()) {
      if(nextAliasOverride.getName().equals(aliasName)) {
        aliasOverride = nextAliasOverride;
        break;
      }
    }
   
    return aliasOverride;
  }
 
  private AliasOverride getGroupAliasOverride(String aliasName) throws ContentFileProcessingException, AmbiguousAliasException {
    AliasOverride aliasOverride = null;
    List<String> groupNames = groupNames();
   
    for(AliasDefinitionsFile aliasDefinitionsFile : bundlableNode.aliasDefinitionFiles()) {
      AliasOverride nextAliasOverride = aliasDefinitionsFile.getGroupOverride(aliasName, groupNames);
     
     
     
      if(aliasOverride != null && nextAliasOverride != null) {
        throw new AmbiguousAliasException(getUnderlyingFile(), aliasName, groupNames);
      }
     
      if (nextAliasOverride != null)
      {
        aliasOverride = nextAliasOverride;
      }

    }
   
    return aliasOverride;
  }
}
TOP

Related Classes of org.bladerunnerjs.aliasing.aliases.AliasesFile

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.