package org.gscript.data.library;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Properties;
import org.gscript.view.LibraryPropertiesView;
import android.content.Context;
import android.util.Log;
@LibraryAttribute(title = "", description = "", version = 0, view = Library.LibraryStubView.class)
public abstract class Library {
static final String LOG_TAG = "library";
public static final int FLAG_INCLUDE_CONTENT = 0x1;
public static final int FLAG_INCLUDE_PERMISSIONS = 0x2;
public static final int FLAG_MANUAL_REFRESH = 0x4;
private LibraryNotificationListener mListener;
private Context mContext;
private int mId;
private Properties mProperties;
public void create(Context context, int id, Properties properties,
LibraryNotificationListener l) {
mContext = context;
mId = id;
mProperties = properties;
mListener = l;
this.onCreate(context, properties);
}
public void destroy() {
this.onDestroy();
}
public abstract void onCreate(Context context, Properties properties);
public abstract void onDestroy();
public int getId() {
return mId;
}
public Properties getProperties() {
return mProperties;
}
protected Context getContext() {
return mContext;
}
public ArrayList<LibraryItem> query(String path, int flags) {
ArrayList<LibraryItem> items = onQuery(path, flags);
Collections.sort(items, LibraryItem.BaseComparator);
return items;
}
public abstract ArrayList<LibraryItem> onQuery(String path, int flags);
void notifyChange() {
notifyChange("/");
}
void notifyChange(String path) {
if (mListener != null)
mListener.OnLibraryChanged(this, path);
}
public static interface LibraryNotificationListener {
void OnLibraryChanged(Library library, String path);
}
public static Library forType(String type) {
Library library = null;
try {
Class<?> clazz = Class.forName(type);
library = (Library) clazz.newInstance();
} catch (ClassNotFoundException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
if (library == null)
Log.d(LOG_TAG, String.format("No library for type %s", type));
return library;
}
public static class LibraryStubView extends LibraryPropertiesView {
public LibraryStubView(Context context, Properties properties,
LibraryPropertiesListener listener) {
super(context, properties, listener);
}
@Override
public boolean hasValidProperties() {
return false;
}
}
}