/*
* JBoss, Home of Professional Open Source.
* Copyright 2013, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.gatein.ui.admin.importexport.beans;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import org.exoplatform.container.PortalContainer;
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;
import org.gatein.management.api.ContentType;
import org.gatein.management.api.PathAddress;
import org.gatein.management.api.controller.ManagedRequest;
import org.gatein.management.api.controller.ManagedResponse;
import org.gatein.management.api.controller.ManagementController;
import org.gatein.management.api.operation.OperationNames;
import org.richfaces.event.FileUploadEvent;
import org.richfaces.model.UploadedFile;
@ManagedBean(name = "importer")
@ViewScoped
public class ImportSiteBean implements Serializable {
private UIComponent component;
public UIComponent getComponent() {
return component;
}
public void setComponent(UIComponent component) {
this.component = component;
}
private static final long serialVersionUID = 1L;
private static final Logger log = LoggerFactory.getLogger(ImportSiteBean.class);
private static Map<String,String> importModes;
static {
importModes = new LinkedHashMap<String,String>();
importModes.put("conserve", "redirect.admin.import.item.conserve");
importModes.put("insert", "redirect.admin.import.item.insert");
importModes.put("merge", "redirect.admin.import.item.merge");
importModes.put("overwrite", "redirect.admin.import.item.overwrite");
}
public Map<String,String> getImportModes() {
return importModes;
}
private String importMode = "merge";
public String getImportMode() {
return importMode;
}
public void setImportMode(String importMode) {
this.importMode = importMode;
}
public void importSite(FileUploadEvent event) throws Exception {
UploadedFile item = event.getUploadedFile();
ManagementController controller = (ManagementController) PortalContainer.getComponent(ManagementController.class);
Map<String, List<String>> attributes = new HashMap<String, List<String>>(1);
attributes.put("importMode", Collections.singletonList(importMode));
ManagedRequest request = ManagedRequest.Factory.create(OperationNames.IMPORT_RESOURCE,
PathAddress.pathAddress("mop"), attributes, item.getInputStream(), ContentType.ZIP);
try {
ManagedResponse response = controller.execute(request);
if (!response.getOutcome().isSuccess()) {
addMessage(item.getName());
log.error(response.getOutcome().getFailureDescription());
}
} catch (Exception e) {
addMessage(item.getName());
log.error("Error while processing" + item.getName(), e);
}
}
private void addMessage(String filename){
final FacesContext context = FacesContext.getCurrentInstance();
final FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR, filename, null);
context.addMessage(component.getClientId(), facesMsg);
}
}