11.nexacro-xeni 확장 인터페이스

Edit

이 문서는 넥사크로플랫폼에서 제공하는 nexacro-xeni의 확장 인터페이스를 이용하여 사용자가 기본적인 nexacro-xeni의 Excel 파일의 Export 및 Import 기능을 확장하는 방법에 대해 설명합니다.

사용자의 특화된 기능을 구현하기 위해 nexacro-xeni에서는 제공하는 확장 인터페이스를 사용하여 사용자가 별도의 특화된 로직 구현이 필요합니다.

11.1nexacro-xeni의 확장 인터페이스

nexacro-xeni에서는 사용자의 확장 개발을 위한 인터페이스를 제공하고 있습니다. 사용자는 제공된 인터페이스의 구현을 통하여 넥사크로플랫폼에서 전달받은 Grid Data를 Excel 파일로 생성하기 전에 사용자에 의해 정의된 기능을 추가할 수 있습니다. 또한, 넥사크로 플랫폼에서 전달받은 Excel 파일을 Grid Data로 변환하기 전에 추가적인 작업을 구현할 수 있습니다.

사용자는 Extend nexacro-xeni 인터페이스를 이용하여 아래와 같은 추가 기능을 구현할 수 있습니다. 또한 nexacro-xeni의 기본 실행단계를 해치지 않는 범위에서 원하는 기능을 추가 구현할 수 있습니다.

Extend nexacro-xeni 인터페이스는 다음의 Method를 제공합니다.

해당 메소드는 XeniExtendBase (nexacro17-xeni => XeniExcelDataStorageBase) 인터페이스를 상속받아서 구현할 수 있습니다. 구현된 인터페이스를 사용하기 위해서는 사용자가 구현한 Class를 해당 properties 파일에 등록하여 사용합니다.

Excel 파일을 PlatformData로 변환과 PlatformData의 Excel 변환은 nexacro-xeni내부에서 구현되어 있으며 이에 대한 추가적인 기능은 허용되지 않습니다.

11.1.1loadTargetStream

public InputStream loadTargetStream(String filepath)

이 인터페이스는 nexacro-xeni가 생성할 PlatformData의 소스를 지정하는 용도로 사용됩니다.

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

11.1.2saveImportStream

String saveImportStream(VariableList varlist, InputStream in, String filepath)

넥사크로플랫폼에서 전달받은 Excel 파일을 PlatformData로 저장하는 인터페이스로 넥사크로 플랫폼으로 부터 온 Excel 파일(InputStream)을 지정된 디렉토리(filepath)나 Database에 저장하고 저장된 후 저장된 Database의 Key(filepath)나 파일경로(filepath)를 리턴합니다.

인터페이스의 구현은 아래의 기본적인 Excel Import 로직을 포함하여 자유롭게 확장할 수 있습니다.

public String saveImportStream(VariableList varlist, InputStream in, String filepath) throws Exception {
    int nIdx = filepath.lastIndexOf("/");
    String sPath = filepath.substring(0, nIdx);
        
    File file = new File(sPath);
    if (file.exists() == false) {
        file.mkdirs();
    }
        
    // write input stream to file
    OutputStream out = new FileOutputStream(filepath);

    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();

    return null;
}

11.1.3saveExportStream

int saveExportStream(VariableList varlist, DataSet dscmd, ByteArrayOutputStream out, String filepath, String fileurl, HttpServletResponse response)

넥사크로 플랫폼으로 부터 받은 Grid 데이타를 Excel 파일로 저장하고 저장된 경로(Key)를 클라이언트로 전송하여 다운로드 가능하게 합니다.

아래의 기본적인 Excel Export 로직을 포함하여 자유롭게 확장할 수 있습니다.

public int saveExportStream(VariableList varlist, DataSet dscmd, ByteArrayOutputStream out, String filepath, String fileurl, HttpServletResponse response)  throws Exception {

    int nIdx = filepath.lastIndexOf("/");
    String sPath = filepath.substring(0, nIdx);
        
    File file = new File(sPath);
    if (file.exists() == false) {
        file.mkdirs();
    }
        
    FileOutputStream fout = new FileOutputStream(filepath);
    fout.write(out.toByteArray());
        
    fout.close();
    out.close();
        
    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;
}

11.2XeniExtendBase를 사용하기 위한 설정

11.2.1XeniExtendBase 구현 클래스 파일의 복사

1

확장 구현된 XeniExtendBase (nexacro17-xeni => XeniExcelDataStorageBase) 인터페이스를 구현한 후, 사용하기 위해서 구현된 클래스 파일을 아래의 경로에 복사합니다.

확장된 클래스명은 변경할 수 있습니다.

nexacro-xeni > WEB-INF > classes

2

개발된 클래스의 사용을 위해서는 xeni.properties 파일을 아래의 경로중 하나에 생성합니다.

  • nexacro-xeni > WEB-INF > classes

  • nexacro-xeni > WEB-INF > lib

  • CLASSPATH에 정의된 경로

3

xeni.properties 파일에 개발된 클래스명을 nexacro-xeni의 확장 인터페이스로 등록합니다.

nexacro14-xeni 경우 ( xeni.properties 파일 )

xeni.exportimport.extend={사용자패키지명}.{사용자클래스명}
예) xeni.exportimport.extend=com.nexacro.xeni.util.XeniExtendUseFile

nexacro17-xeni 경우 ( xeni.properties 파일 )

xeni.exportimport.storage={사용자패키지명}.{사용자클래스명}
예) xeni.exportimport.storage=com.nexacro17.xeni.extend.XeniExcelDataStorageDef