package is.idega.idegaweb.egov.bpm.media;
import is.idega.idegaweb.egov.bpm.IWBundleStarter;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.block.process.presentation.beans.CasesSearchResultsHolder;
import com.idega.core.file.util.MimeTypeUtil;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.io.DownloadWriter;
import com.idega.io.MediaWritable;
import com.idega.io.MemoryFileBuffer;
import com.idega.jbpm.artifacts.presentation.ProcessArtifacts;
import com.idega.jbpm.exe.BPMFactory;
import com.idega.jbpm.exe.ProcessInstanceW;
import com.idega.jbpm.exe.ProcessManager;
import com.idega.presentation.IWContext;
import com.idega.user.data.User;
import com.idega.util.FileUtil;
import com.idega.util.expression.ELUtil;
public class ProcessUsersExporter extends DownloadWriter implements MediaWritable {
public static final String PROCESS_INSTANCE_ID = "pr-inst-id";
public static final String SHOW_USER_COMPANY = "show-u-c";
@Autowired
private BPMFactory bpmFactory;
@Autowired
private ProcessArtifacts processArtifacts;
private MemoryFileBuffer memory = null;
@Override
public String getMimeType() {
return MimeTypeUtil.MIME_TYPE_EXCEL_2;
}
@Override
public void init(HttpServletRequest req, IWContext iwc) {
ELUtil.getInstance().autowire(this);
String id = iwc.getParameter(PROCESS_INSTANCE_ID);
long processInstanceId = Long.valueOf(id);
ProcessManager processManager = bpmFactory.getProcessManagerByProcessInstanceId(processInstanceId);
ProcessInstanceW piw = processManager.getProcessInstance(processInstanceId);
Collection<User> users = processArtifacts.getUsersConnectedToProces(piw);
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
String fileName = iwrb.getLocalizedString("exported_contacts", "Exported contacts");
CasesSearchResultsHolder searchResultHolder = ELUtil.getInstance().getBean(CasesSearchResultsHolder.SPRING_BEAN_IDENTIFIER);
boolean showCompany = "y".equals(iwc.getParameter(SHOW_USER_COMPANY));
memory = searchResultHolder.getUsersExport(users, iwc.getCurrentLocale(), showCompany);
memory.setMimeType(MimeTypeUtil.MIME_TYPE_EXCEL_2);
setAsDownload(iwc, fileName.concat(".xls"), memory.length());
}
@Override
public void writeTo(OutputStream streamOut) throws IOException {
InputStream streamIn = new ByteArrayInputStream(memory.buffer());
FileUtil.streamToOutputStream(streamIn, streamOut);
streamOut.flush();
streamOut.close();
streamIn.close();
}
}