Package org.apache.forrest.forrestbot.webapp.util

Source Code of org.apache.forrest.forrestbot.webapp.util.Project

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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.
*/
/*
* Created on Feb 10, 2004
*/
package org.apache.forrest.forrestbot.webapp.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;

import org.apache.forrest.forrestbot.webapp.Constants;
import org.apache.forrest.forrestbot.webapp.Config;
import org.apache.forrest.forrestbot.webapp.dto.ProjectDTO;
import org.apache.log4j.Logger;

import com.opensymphony.user.Group;
import com.opensymphony.user.UserManager;

public class Project {
  protected ProjectDTO dto;
  private static Logger log = Logger.getLogger(Project.class);

  private String logfile = null;

  public Project() {
    this(new ProjectDTO());
  }
  public Project(ProjectDTO dto) {
    this.dto = dto;
  }
  public ProjectDTO asDTO() {
    return dto;
  }

  public void loadData() {
    dto.setLastBuilt(getLastBuilt());
    dto.setUrl(getUrl());
    dto.setLogUrl(getLogUrl());
    dto.setStatus(getStatus());
    dto.setLogged(isLogged());
  }

  public void loadSecurity(String user) {
    dto.setBuildable(isBuildable(user));
    dto.setDeployable(isDeployable(user));
  }

  private boolean isBuildable(String user) {
    UserManager userManager = UserManager.getInstance();
    try {
      for (Iterator i = userManager.getGroups().iterator(); i.hasNext();) {
        Group g = (Group) i.next();
        if (g.containsUser(dto.getName()) && g.containsUser(user))
          return true;
      }
    } catch (Exception e) {
      log.warn("error while checking if " + user + " has access to build " + dto.getName(), e);
    }
   
    return false;
  }

  private boolean isDeployable(String user) {
    // for now we don't need to seperate deployable and buildable security
    return isBuildable(user);
  }

  private boolean isLogged() {
    return new File(getLogFile()).isFile();
  }
 
  private String getLogFile() {
    if (logfile == null) {
      logfile = Config.getProperty("logs-dir") + "/" + dto.getName() + ".log";
    }
    return logfile;
  }

  private Date getLastBuilt() {
    File f = new File(getLogFile());
    long lm = f.lastModified();
    if (lm == 0)
      return null;
    else
      return new Date(lm);
  }

  private String getUrl() {
    return Config.getProperty("build-url") + "/" + dto.getName() + "/";
  }

  private String getLogUrl() {
    return Config.getProperty("logs-url") + "/" + dto.getName() + ".log";
  }

  private int getStatus() {
    RandomAccessFile f;
    try {
      f = new RandomAccessFile(getLogFile(), "r");
    } catch (FileNotFoundException e) {
      log.debug("couldn't find log file for: " + getLogFile());
      return Constants.STATUS_UNKNOWN;
    }

    byte[] checkSuccess = new byte[Constants.BUILD_SUCCESS_STRING.length()];
        // try for 2-byte eol
    try {
      f.seek((int) f.length() - checkSuccess.length - 2);
      f.read(checkSuccess, 0, checkSuccess.length);
    } catch (IOException e1) {
      log.debug("couldn't find seek in log file: " + f.toString());
      return Constants.STATUS_UNKNOWN;
    }
    if (Constants.BUILD_SUCCESS_STRING.equals(new String(checkSuccess)))
      return Constants.STATUS_SUCCESS;
        // try for 1-byte eol
    try {
      f.seek((int) f.length() - checkSuccess.length - 1);
      f.read(checkSuccess, 0, checkSuccess.length);
    } catch (IOException e1) {
      log.debug("couldn't find seek in log file: " + f.toString());
      return Constants.STATUS_UNKNOWN;
    }
    if (Constants.BUILD_SUCCESS_STRING.equals(new String(checkSuccess)))
      return Constants.STATUS_SUCCESS;
       
       
        // if date is in last minute, consider it still running
    if (getLastBuilt().getTime() > (new Date()).getTime() - 60 * 1000)
      return Constants.STATUS_RUNNING;
       
        // default
    return Constants.STATUS_FAILED;
  }

  /**
   * @return Collection of type ProjectDTO
   */
  public static Collection getAllProjects() {

    /* based on config files */
    ArrayList sites = new ArrayList();
    File f = new File(Config.getProperty("config-dir"));
    File[] possibleSites = f.listFiles();
    for (int i = 0; i < possibleSites.length; i++) {
      if (possibleSites[i].isFile()) {
        String name = possibleSites[i].getName();
        if (name.endsWith(".xml")) {
          ProjectDTO projectDTO = new ProjectDTO();
          projectDTO.setName(name.substring(0, name.length() - 4));
          (new Project(projectDTO)).loadData();
          sites.add(projectDTO);
        }
      }
    }
    Collections.sort(sites);
    return sites;
  }


  public static boolean exists(String project) {
    Collection c = getAllProjects();
    for (Iterator i = c.iterator(); i.hasNext();) {
      if (((ProjectDTO)i.next()).getName().equals(project)) {
        return true;
      }
    }
    return false;
  }
}
TOP

Related Classes of org.apache.forrest.forrestbot.webapp.util.Project

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.