nexacro-xeni 확장 인터페이스 작성 예 - DRM

nexacro-xeni 확장 인터페이스로 DRM 솔루션 적용 시에는 DRM 솔루션 제공 업체에서 가이드하는 방법으로 구현해야 합니다. DRM 솔루션에 따라 다양한 메소드 및 방법을 제공하고 있습니다. 이 문서에서는 일반적인 사용 시나리오를 설명합니다.

Excel 파일에 DRM을 적용하는 방법은 아래와 같은 두 가지 방법이 있습니다.

이번 장은 Server에서 DRM을 적용하는 방법만 설명합니다.

이번 장은 넥사크로플랫폼 N 버전을 기준으로 설명합니다.

넥사프로플랫폼 14, 17.1 관련 설명은 nexacro-xeni 확장 인터페이스를 참고하세요.

DRM이 적용된 Excel 파일 Import/Export 시나리오

DRM이 적용된 Excel 파일의 Import는 아래와 같은 순서로 처리됩니다.

  1. 넥사크로플랫폼에서 서버로 파일 업로드

  2. 서버에 업로드된 Excel 파일을 DRM 솔루션에서 제공한 메소드를 이용하여 해제

  3. PlatformData로 변환해 넥사크로플랫폼으로 전달

Grid 컴포넌트에 표현된 데이터를 Excel 파일로 Export 하는 것은 아래와 같은 순서로 처리됩니다.

  1. Grid 컴포넌트에 표현된 데이터를 서버로 업로드

  2. 서버에서 Excel 파일 생성

  3. DRM 솔루션에서 제공한 메소드를 이용해 DRM이 적용된 Excel 파일로 변환

  4. Excel 파일을 내려받을 수 있는 URL을 넥사크로플랫폼으로 전달

확장 인터페이스 상속

XeniExcelDataStorageBase 인터페이스를 상속받은 XeniDrmSample 클래스를 생성합니다. 각 참조할 패키지와 DRM 솔루션에서 제공하는 패키지도 import 합니다.

package com.nexacro.user.drm;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import Jakarata.servlet.http.HttpServletResponse;
// import javax.servlet.http.HttpServletResponse;

import com.nexacro.java.xapi.data.DataSet;
import com.nexacro.java.xapi.data.PlatformData;
import com.nexacro.java.xapi.data.VariableList;
import com.nexacro.java.xapi.tx.HttpPlatformResponse;
import com.nexacro.java.xapi.tx.PlatformType;

public class XeniDrmSample implements XeniExcelDataStorageBase {

메소드 구현

Excel 파일 Import/Export 시나리오에 따라 메소드를 구현합니다.

(InputStream) loadTargetStream

loadTargetStream 메소드는 다른 구현 없이 지정된 경로의 Excel 파일을 열고 파일 스트림을 전달하도록 구현합니다.

public InputStream loadTargetStream(String filepath) throws Exception {
	File file = new File(filepath);
	return new FileInputStream(file);
}

(String) saveImportStream

넥사크로플랫폼에서 전달받은 Excel 데이터를 설정한 위치에 파일로 저장하거나 데이터베이스에 저장하는 기능을 합니다.

saveImportStream 메소드는 파라미터로 전달받은 경로를 확인합니다. 지정된 경로가 존재하지 않을 경우 새로 생성합니다.

int nIdx = filepath.lastIndexOf("/");
String sPath = filepath.substring(0, nIdx);
String fileName = filepath.substring(nIdx + 1);
String srcFile = sPath + "/__temp_" + fileName;

File file = new File(sPath);
if(file.exists() == false) {
	file.mkdirs();
}
파라미터로 전달받은 DRM이 적용된 Excel 파일 스트림을 지정된 경로에 프리픽스 "__temp_"를 붙여서 임시 파일을 생성하고 저장합니다.
OutputStream out = new FileOutputStream(srcFile);

byte[] buf = new byte[1024];
int length = 0;
while((length = in.read(buf)) > 0) {
	out.write(buf, 0, length);
}

out.flush();
out.close();
in.close();
지정된 경로에 저장된 임시 파일(DRM 적용 파일)을 DRM 솔루션이 제공한 DRM 해제 메소드를 이용하여 해제합니다. DRM 메소드의 필수 파라미터와 실행 결과에 대한 Exception 처리는 제공된 DRM 솔루션의 가이드에 따릅니다.
boolean isSuccess = DrmUtil.extractDRM(srcFile, filepath);
DRM의 해제 메소드가 정상적으로 처리되었으면 DRM이 적용된 임시 파일은 삭제하고 반환합니다.
File delFile = new File(srcFile);
if(delFile.exists()) {
	file.delete();
}

이 이후의 DRM이 해제된 Excel 파일을 PlatformData로 변환하는 작업은 nexacro-xeni 내부에서 처리하며 따로 구현할 필요는 없습니다. 또한 변경하도록 허용되지 않습니다.

(int) saveExportStream

이 메소드는 넥사크로플랫폼에서 전달받은 Grid 컴포넌트 데이터를 가지고 nexacro-xeni 내부에서 생성한 Excel 파일 스트림을 Excel 파일로 저장하고 넥사크로플랫폼에서 다운로드 할 수 있는 URL을 전달하는 기능을 구현합니다.

파라미터로 전달받은 경로의 존재 여부를 체크합니다. 경로가 존재하지 않으면 생성합니다.

Grid 데이타를 Excel 파일로 변환하는 기능은 nexacro-xeni 내부에서 처리함으로 여기에서는 구현할 필요가 없습니다. 파라미터 "ByteArrayOutputStream out"로 전달받습니다.

int nIdx = filepath.lastIndexOf("/");
String sPath = filepath.substring(0, nIdx);
String fileName = filepath.substring(nIdx + 1);
String srcFile = sPath + "/__temp_" + fileName;

File file = new File(sPath);
if(file.exists() == false) {
	file.mkdirs();
}
nexacro-xeni에서 변환된 Excel 파일 스트림(DRM 적용전)을 지정된 경로에 임시 파일명(프리픽스 "__temp_")으로 생성하고 저장합니다.
FileOutputStream fout = new FileOutputStream(srcFile);
fout.write(out.toByteArray());

fout.close();
out.close();
DRM이 적용되지 않은 임시 파일을 DRM 솔루션이 제공한 메소드를 이용하여 DRM이 적용된 파일로 생성합니다.  상세한 구현은 DRM 솔루션에서 제공하는 가이드를 따릅니다.
String id = varlist.getString("id");
String name = varlist.getString("name");
String code = varlist.getString("code");
String dept = varlist.getString("dept");
boolean isSuccess = DrmUtil.packagingDRM(srcFile, filepath, id, name, code, dept);

DRM 적용이 성공했으면 사용된 임시 파일은 삭제합니다.

File delFile = new File(srcFile);
if(delFile.exists()) {
	file.delete();
}

DRM이 적용된 Excel 파일의 정보(URL) 및 변환 결과를 PlatformData에 담아 넥사크로플랫폼으로 전달합니다.

DataSet dsRes = CommUtil.getDatasetExportResponse(dscmd);

PlatformData resData = new PlatformData();
VariableList varList = resData.getVariableList();

varList.add("ErrorCode", 0);
varList.add("ErrorMsg", "SUCCESS");

dsRes.set(0, "url", fileurl);
resData.addDataSet(dsRes);

HttpPlatformResponse platformRes = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_SSV, "UTF-8");
platformRes.setData(resData);
platformRes.sendData();

return 0;

넥사크로플랫폼으로 전달해야 할 정보가 있으면 이 위치에 추가할 수 있습니다.

(Dataset) saveExportStream

구현하지 않아도 되지만 빈 메소드로 선언해야 하는 메소드입니다.

public DataSet saveExportStream(VariableList varlist, DataSet dscmd, ByteArrayOutputStream out, String filepath, String fileurl) throws Exception {
      return null;
}