package me.chenyi.jython;
import javax.swing.*;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.moviejukebox.themoviedb.model.MovieDb;
import me.chenyi.mm.MovieManager;
import me.chenyi.mm.MovieManagerFrame;
import me.chenyi.mm.model.Attribute;
import me.chenyi.mm.model.DatabaseUtil;
import me.chenyi.mm.model.ModelUtils;
import me.chenyi.mm.model.Node;
import me.chenyi.mm.service.ServiceUtilities;
import me.chenyi.mm.ui.IndeterminateWaitDialog;
import me.chenyi.mm.util.SysUtil;
/**
* Class description goes here
*
* @author $Author:$
* @version $Revision:$
*/
public class ScriptLibrary
{
private static ScriptLibrary instance = null;
public static ScriptLibrary getInstance()
{
if (instance == null)
instance = new ScriptLibrary();
return instance;
}
public long getCurrentMovieId()
{
return ScriptEnvironment.getInstance().getCurrentMovieId();
}
public void setCurrentMovieId(long item)
{
ScriptEnvironment.getInstance().setCurrentMovieId(item);
}
public String getAttributeName(long attributeId)
{
Attribute attribute = ModelUtils.getAttribute(attributeId);
if (attribute == null)
return null;
return attribute.getName();
}
public Object getAttributeValue(long itemId, String attributeName)
{
Node movie = ModelUtils.getMovie(itemId);
if (movie == null)
return null;
return movie.getAttributeValue(attributeName);
}
public Object setAttributeValue(long itemId, String attributeName, Object value)
{
try
{
Map<Attribute, Object> valueMap = new HashMap();
Connection connection = DatabaseUtil.openConnection();
Attribute.AttributeType type = Attribute.AttributeType.String;
if(value instanceof Number)
{
type = Attribute.AttributeType.Number;
}
else
value = String.valueOf(value);
valueMap.put(ModelUtils.getOrAddAttribute(connection, attributeName, type), value);
Node node = ModelUtils.updateNode(connection, itemId, valueMap);
DatabaseUtil.closeConnection(connection);
return node;
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
public int getMovieCount()
{
return ModelUtils.getAllMovieIds().size();
}
public String[] searchMovieByName(String name)
{
List<MovieDb> movieDbs = ServiceUtilities.searchMovie(name);
String[] result = new String[movieDbs.size()];
int index = 0;
for(MovieDb movieDb : movieDbs)
{
result[index] = movieDb.getTitle();
index ++;
}
return result;
}
public void addMovie(String name)
{
ServiceUtilities.addMovieInfoToDatabase(name, 1, true);
}
public void addMovies(String name)
{
ServiceUtilities.addMovieInfoToDatabase(name, -1, true);
}
public void addMovies(String name, int maxCount)
{
ServiceUtilities.addMovieInfoToDatabase(name, maxCount, true);
}
public void addMovie(long movieId)
{
ServiceUtilities.addMovieInfoToDatabase(movieId, true);
}
public int openUrlInBrowser(String url)
{
return SysUtil.openUrlInBrowser(url);
}
public MovieManagerFrame getMainFrame()
{
return MovieManager.getFrame();
}
private IndeterminateWaitDialog waitDialog;
public void showWaitDialog(final String waitText)
{
if (waitDialog == null)
{
waitDialog = new IndeterminateWaitDialog(MovieManager.getFrame());
}
if (SwingUtilities.isEventDispatchThread())
{
waitDialog.setWaitText(waitText);
waitDialog.setVisible(true);
}
else
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
waitDialog.setWaitText(waitText);
waitDialog.setVisible(true);
}
});
}
}
public void closeWaitDialog()
{
if (waitDialog == null)
{
return;
}
waitDialog.setVisible(false);
}
}