/*
 * Copyright (c) 2014 Eike Stepper (Loehne, Germany) and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 *
 * Contributors:
 *    Eike Stepper - initial API and implementation
 */
package org.eclipse.oomph.p2.core;

import java.io.File;

/**
 * @author Eike Stepper
 */
public interface AgentManagerElement
{
  public AgentManager getAgentManager();

  public File getLocation();

  public boolean isValid();

  public boolean isCurrent();

  public boolean isUsed();

  public void delete();

  public void delete(boolean force);
}
