Package net.sf.robocode.dotnet.repository.root

Source Code of net.sf.robocode.dotnet.repository.root.DllRoot

/**
* Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*/
package net.sf.robocode.dotnet.repository.root;


import net.sf.robocode.repository.root.BaseRoot;
import net.sf.robocode.repository.root.IRepositoryRoot;
import net.sf.robocode.repository.IRepository;
import net.sf.robocode.repository.items.IRepositoryItem;
import net.sf.robocode.repository.items.RobotItem;
import net.sf.robocode.repository.items.handlers.ItemHandler;
import net.sf.robocode.io.Logger;

import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.File;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import java.lang.String;


/**
* @author Pavel Savara (original)
* @author Flemming N. Larsen (contributor)
*/
public final class DllRoot extends BaseRoot implements IRepositoryRoot {
  private static final long serialVersionUID = 1L;

  private final String dllPath;
  private final URL dllUrl;

  private long lastModified;

  public DllRoot(IRepository repository, File rootPath) {
    super(repository, rootPath);
    String dllPath = null;
    URL dllUrl = null;
    try {
      dllPath = rootPath.toURI().toString();
      dllUrl = new URL(dllPath + "!/");
      dllPath = URLDecoder.decode(dllPath, "UTF8");
    } catch (MalformedURLException e) {
      Logger.logError(e);
    } catch (UnsupportedEncodingException e) {
      Logger.logError(e);
    }
    this.dllPath = dllPath;
    this.dllUrl = dllUrl;
  }

  /**
   * {@inheritDoc}
   */
  public void updateItems(boolean force) {
    setStatus("Updating DLL: " + rootPath.toString());

    long lastModified = rootPath.lastModified();

    if (lastModified > this.lastModified) {
      repository.removeItemsFromRoot(this);
      this.lastModified = lastModified;

      List<IRepositoryItem> repositoryItems = new ArrayList<IRepositoryItem>();

      visitItems(repositoryItems);
      for (IRepositoryItem repositoryItem : repositoryItems) {
        repositoryItem.update(lastModified, force);
      }
    }
  }

  private void visitItems(List<IRepositoryItem> items) {
    String[] dllItems = DllRootHelper.findItems(dllPath);

    for (String url : dllItems) {
      createItem(items, dllUrl, url);
    }
  }

  private void createItem(List<IRepositoryItem> items, URL root, String url) {
    try {
      IRepositoryItem item = ItemHandler.registerItem(new URL(url), DllRoot.this, repository);
      if (item != null) {
        if (item instanceof RobotItem) {
          ((RobotItem) item).setClassPathURL(root);
        }
        items.add(item);
      }
    } catch (MalformedURLException e) {
      Logger.logError(e);
    }
  }

  public void updateItem(IRepositoryItem item, boolean force) {
    item.update(rootPath.lastModified(), force);
  }

  public boolean isChanged(IRepositoryItem item) {
    return rootPath.lastModified() > lastModified;
  }

  public URL getRootUrl() {
    return dllUrl;
  }

  public boolean isDevelopmentRoot() {
    return false;
  }

  public boolean isJAR() {
    return true;
  }
}
TOP

Related Classes of net.sf.robocode.dotnet.repository.root.DllRoot

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.