/**
*
*/
package org.inbio.m3s.gwt.client.widgets.metadata;
import org.inbio.m3s.gwt.client.dto.metadata.GeneralMetadataGWTDTO;
import org.inbio.m3s.gwt.client.dto.metadata.TechnicalMetadataGWTDTO;
import org.inbio.m3s.gwt.client.dto.metadata.UsesAndCopyrightsGWTDTO;
import org.inbio.m3s.gwt.client.rpcinterface.MetadataRPC;
import org.inbio.m3s.gwt.client.rpcinterface.MetadataRPCAsync;
import org.inbio.m3s.gwt.client.widgets.login.LoginManager;
import org.inbio.m3s.gwt.client.widgets.metadata.listener.CategoryAndTypeListener;
import org.inbio.m3s.gwt.client.widgets.metadata.listener.MetadataListener;
import org.inbio.m3s.gwt.client.widgets.metadata.ui.GeneralMetadataPanel;
import org.inbio.m3s.gwt.client.widgets.metadata.ui.TechnicalMetadataPanel;
import org.inbio.m3s.gwt.client.widgets.metadata.ui.UsesAndCopyrightsPanel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.InvocationException;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
* The main purpose of these class is to be the manager of all the metadata of
* the medias, this widget has to be used (and reused) in the insert/edit mode
* of visualization for every media (images, videos, audios)
*
* @author jgutierrez
*
*/
public class MetadataContainer extends VerticalPanel implements CategoryAndTypeListener {
// rpc service
private MetadataRPCAsync rpc;
private MetadataListener listener;
// container of the diferent types of information
private TabPanel tabPanel;
// private GeneralMetadataTable generalMetadata;
private GeneralMetadataPanel gmPanel;
// private UsesAndCopyrightsTable usesAndCopyrights;
private UsesAndCopyrightsPanel uacPanel;
private TechnicalMetadataPanel tmPanel;
/**
* Class Constructor
*
*/
public MetadataContainer(MetadataListener metadataListener) {
super();
// init RPC
rpc = (MetadataRPCAsync) GWT.create(MetadataRPC.class);
ServiceDefTarget endpoint = (ServiceDefTarget) rpc;
endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "metadataRPC");
listener = metadataListener;
tabPanel = new TabPanel();
add(tabPanel);
}
/**
* Sends all the metadata to DB to be persist
*
*/
public void saveMetadata() {
//Window.alert("Guardando metadatos - INICIO");
GeneralMetadataGWTDTO gmtv = gmPanel.getGeneralMetadataGWTDTO();
UsesAndCopyrightsGWTDTO uactv = uacPanel.getUsesAndCopyrightsGWTDTO();
TechnicalMetadataGWTDTO tmtv = tmPanel.getTechMetadataGWTDTO();
//Window.alert("hasta aca todo bien");
rpc.saveMetadata(gmtv, uactv, tmtv, LoginManager.getUserName(),
new AsyncCallback<Integer>() {
public void onFailure(Throwable caught) {
// RPCFailureManager(SAVE_METADATA, caught);
Window.alert("Error: " + caught.getMessage());
}
public void onSuccess(Integer result) {
// RPCSuccessManager(SAVE_METADATA, result);
/**
* TODO: Debe retornarse un popup donde diga el
* resultado de la operacion en este se debe indicar el
* codigo con el cual se guardara la imagen, el volumen
* y el archivo donde queda almacenada.
*/
listener.metadataSaved(result);
}
});
// TODO a graphical representation, so the user could know what its
// going on... and when the asyncCalback returns the graphical
// representation disapears or informs about the result of the method
System.out.println("Guardando metadatos - FIN");
}
/**
* Inits the General Metadata tab
*
* @param language
* @param mainTab
* if true will set this tab as the
*/
public void initGeneralMetadata(Integer language, boolean mainTab) {
gmPanel = new GeneralMetadataPanel(this);
tabPanel.add(gmPanel, "Información General");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(gmPanel));
}
}
public void initGeneralMetadata(final Integer language, final boolean mainTab, Integer mediaId) {
// loading generalMetadata
System.out.println("initGeneralMetadata - INICIO");
rpc.getGeneralMetadataTV(mediaId, new AsyncCallback<GeneralMetadataGWTDTO>() {
public void onFailure(Throwable caught) {
RPCFailureManager(caught);
}
public void onSuccess(GeneralMetadataGWTDTO gmGWTDTO) {
initGeneralMetadata(language, mainTab);
gmPanel.setGeneralMetadataGWTDTO(gmGWTDTO);
System.out.println("initGeneralMetadata - RPC on Success");
}
});
}
/**
* Inits the Uses and Copyrights tab
*
* @param language
* @param mainTab
* if true will set this tab as the
*/
public void initUsesAndCopyrightsTab(Integer language, boolean mainTab, UsesAndCopyrightsGWTDTO uacGWTDTO) {
uacPanel = new UsesAndCopyrightsPanel(uacGWTDTO);
tabPanel.add(uacPanel, "Usos y Derechos de Uso");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(uacPanel));
}
}
public void initUsesAndCopyrightsTab(Integer language, boolean mainTab) {
uacPanel = new UsesAndCopyrightsPanel(null);
tabPanel.add(uacPanel, "Usos y Derechos de Uso");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(uacPanel));
}
}
/**
*
* @param language
* @param mainTab
* @param mediaId
*/
public void initUsesAndCopyrightsTab(final Integer language, final boolean mainTab, Integer mediaId) {
System.out.println("initUsesAndCopyrightsTab - INICIO");
rpc.getUsesAndCopyrigthsMetadataTV(mediaId, new AsyncCallback<UsesAndCopyrightsGWTDTO>() {
public void onFailure(Throwable caught) {
RPCFailureManager(caught);
}
public void onSuccess(UsesAndCopyrightsGWTDTO uacGWTDTO) {
initUsesAndCopyrightsTab(language, mainTab, uacGWTDTO);
System.out.println("initUsesAndCopyrightsTab - RPC on Success");
}
});
}
/**
* Inits the TechnicalMetadata tab, the General Metadata Tab has to be
* already up and runnig or will be an error here
*
* @param language
* @param mediaTypeName
* @param mainTab
* if true will set this tab as the
private void initTechMetadataTab(Integer language, boolean mainTab) {
String mediaTypeName = gmPanel.getCurrentMediaTypeText();
tmPanel = new TechnicalMetadataPanel(language, mediaTypeName);
tabPanel.add(tmPanel, "Información Técnica");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(tmPanel));
}
}
*/
/**
* Inits the TechnicalMetadata tab
*
* @param language
* @param mediaTypeName
* @param mainTab
* if true will set this tab as the
*/
@SuppressWarnings("unchecked")
public void initTechMetadataTab(Integer language, String mediaTypeKey, final boolean mainTab) {
rpc.getTechnicalMetadataNames(mediaTypeKey, new AsyncCallback() {
public void onFailure(Throwable caught) {
RPCFailureManager(caught);
}
public void onSuccess(Object result) {
TechnicalMetadataGWTDTO tmGWTDTO = (TechnicalMetadataGWTDTO) result;
//initTechMetadataTab(language, tmGWTDTO.getMediaTypeKey(), mainTab);
tmPanel = new TechnicalMetadataPanel(tmGWTDTO);
tabPanel.add(tmPanel, "Información Técnica");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(tmPanel));
}
tmPanel.setTechMetadataGWTDTO(tmGWTDTO);
System.out.println("initTechMetadataTab - RPC on Success");
}
});
}
@SuppressWarnings("unchecked")
public void initTechMetadataTab(final Integer language, final boolean mainTab, Integer mediaId) {
System.out.println("initTechMetadataTab - INICIO");
// The technical Metadata its loaded when the General Metadata
// arrives, because needs the mediaType value
rpc.getTechnicalMetadataTV(mediaId, new AsyncCallback() {
public void onFailure(Throwable caught) {
RPCFailureManager(caught);
}
public void onSuccess(Object result) {
TechnicalMetadataGWTDTO tmGWTDTO = (TechnicalMetadataGWTDTO) result;
tmPanel = new TechnicalMetadataPanel(tmGWTDTO);
tabPanel.add(tmPanel, "Información Técnica");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(tmPanel));
}
tmPanel.setTechMetadataGWTDTO(tmGWTDTO);
System.out.println("initTechMetadataTab - RPC on Success");
}
});
}
@SuppressWarnings("unchecked")
public void initTechMetadataTab(final Integer language, String fileAdress, String mediaTypeKey, final boolean mainTab) {
System.out.println("initTechMetadataTab - INICIO");
// The technical Metadata its loaded when the General Metadata
// arrives, because needs the mediaType value
rpc.getTechnicalMetadataTV(fileAdress, mediaTypeKey, new AsyncCallback() {
public void onFailure(Throwable caught) {
RPCFailureManager(caught);
}
public void onSuccess(Object result) {
TechnicalMetadataGWTDTO tmGWTDTO = (TechnicalMetadataGWTDTO) result;
tmPanel = new TechnicalMetadataPanel(tmGWTDTO);
tabPanel.add(tmPanel, "Información Técnica");
if (mainTab) {
tabPanel.selectTab(tabPanel.getWidgetIndex(tmPanel));
}
tmPanel.setTechMetadataGWTDTO(tmGWTDTO);
System.out.println("initTechMetadataTab - RPC on Success");
}
});
}
/***************************************************************************
* RPC methods
**************************************************************************/
/**
* Called by the the method that receives the asyncCallback result
*
* @param caught
*
*/
private void RPCFailureManager(Throwable caught) {
try {
throw caught;
} catch (InvocationException e) {
System.out
.println("Error conectando con el servidor @ MetadataContainer");
Window.alert("Error conectando con el servidor");
} catch (IllegalArgumentException e) {
System.out
.println("Uno de los argumentos introducidos no existe");
} catch (Throwable e) {
System.out.println("Error en el RPC @ MetadataContainer");
}
}
/**
* Throwed by the general Metadata Panel when the media type selected
* changes so the techmetadata to be shown has to changed to
*
* @param type
*/
public void onTypeChange(String type) {
// TODO Auto-generated method stub
// TODO: make the tech metadata panel show the changes
// String mediaTypeName = gmPanel.getCurrentMediaTypeText();
// tmPanel.getTechnicalMetadataTV(fileId);
// tmPanel = new TechnicalMetadataPanel(language, mediaTypeName);
// tabPanel.add(tmPanel, "Información Técnica");
// if (mainTab) {
// tabPanel.selectTab(tabPanel.getWidgetIndex(tmPanel));
// }
}
/**
*
* @param fileId
public void setTechnicalMetadataInfo(String fileId) {
tmPanel.getTechnicalMetadataTV(fileId);
}
*/
}