blob: aae392dce5ed0daeeeb299afb3450423f96d25f8 [file] [log] [blame]
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* 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 com.intellij.project.model.impl.library;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.roots.impl.libraries.LibraryTableBase;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.roots.libraries.LibraryTablePresentation;
import com.intellij.openapi.roots.libraries.PersistentLibraryKind;
import com.intellij.openapi.util.Disposer;
import com.intellij.util.EventDispatcher;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.library.JpsLibrary;
import org.jetbrains.jps.model.library.JpsLibraryCollection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* @author nik
*/
public class JpsLibraryTableImpl implements LibraryTable, Disposable {
private final JpsLibrariesModel myModel;
private final EventDispatcher<Listener> myDispatcher = EventDispatcher.create(Listener.class);
private final String myTableLevel;
private LibraryTablePresentation myPresentation;
public JpsLibraryTableImpl(JpsLibraryCollection libraryCollection, String level) {
myTableLevel = level;
myModel = new JpsLibrariesModel(libraryCollection);
}
@NotNull
@Override
public Library[] getLibraries() {
return myModel.getLibraries();
}
@NotNull
@Override
public Iterator<Library> getLibraryIterator() {
return myModel.getLibraryIterator();
}
@Override
public Library getLibraryByName(@NotNull String name) {
return myModel.getLibraryByName(name);
}
@Override
public void addListener(Listener listener) {
myDispatcher.addListener(listener);
}
@Override
public void addListener(Listener listener, Disposable parentDisposable) {
myDispatcher.addListener(listener, parentDisposable);
}
@Override
public void removeListener(Listener listener) {
myDispatcher.removeListener(listener);
}
@Override
public Library createLibrary() {
return createLibrary(null);
}
@Override
public Library createLibrary(@NonNls String name) {
final ModifiableModel model = getModifiableModel();
final Library library = model.createLibrary(name);
model.commit();
return library;
}
@Override
public void removeLibrary(@NotNull Library library) {
final ModifiableModel model = getModifiableModel();
model.removeLibrary(library);
model.commit();
}
@Override
public void dispose() {
for (Library library : getLibraries()) {
Disposer.dispose(library);
}
}
@Override
public ModifiableModel getModifiableModel() {
return new JpsLibrariesModel(myModel.myJpsLibraries);
}
@Override
public boolean isEditable() {
return true;
}
@Override
public String getTableLevel() {
return myTableLevel;
}
@Override
public LibraryTablePresentation getPresentation() {
return myPresentation;
}
private class JpsLibrariesModel implements LibraryTableBase.ModifiableModelEx {
private final JpsLibraryCollection myJpsLibraries;
private final List<JpsLibraryDelegate> myLibraries;
private JpsLibrariesModel(JpsLibraryCollection libraryCollection) {
myLibraries = new ArrayList<JpsLibraryDelegate>();
myJpsLibraries = libraryCollection;
for (JpsLibrary library : libraryCollection.getLibraries()) {
myLibraries.add(new JpsLibraryDelegate(library, JpsLibraryTableImpl.this));
}
}
@Override
public Library createLibrary(String name) {
return createLibrary(name, null);
}
@Override
public Library createLibrary(String name, @Nullable PersistentLibraryKind type) {
throw new UnsupportedOperationException("'createLibrary' not implemented in " + getClass().getName());
}
@NotNull
@Override
public Iterator<Library> getLibraryIterator() {
return Collections.<Library>unmodifiableList(myLibraries).iterator();
}
@Override
public void removeLibrary(@NotNull Library library) {
throw new UnsupportedOperationException();
}
@NotNull
@Override
public Library[] getLibraries() {
return myLibraries.toArray(new Library[myLibraries.size()]);
}
@Override
public Library getLibraryByName(@NotNull String name) {
for (JpsLibraryDelegate library : myLibraries) {
if (name.equals(library.getName())) {
return library;
}
}
return null;
}
@Override
public void commit() {
throw new UnsupportedOperationException();
}
@Override
public boolean isChanged() {
return false;
}
}
}