이 샘플에서는 파티션된 데이터 세트에서 새 데이터 세트 멤버를 작성하는 방법을 보여줍니다. 또한 네비게이터 보기에서 원격 아티팩트의 팝업 메뉴에 있는 메뉴 항목을 컨트리뷰션하는 방법을 보여줍니다.
이 샘플을 사용하려면 원격 시스템 탐색기 보기에서 파티션된 데이터 세트를 마우스 오른쪽 단추로 클릭하고 API 샘플 조치 > 멤버 작성 조치를 선택하십시오.
이름이 TEMP인 멤버가 선택된 데이터 세트에 작성됩니다.
createPhysicalMember 샘플 메소드는 findMember 메소드를 사용하여 작성할 멤버가 없는지 확인하고 시작됩니다. 해당 자원이 없으면 findMember 메소드가 널을 리턴합니다.
IPhysicalFile resource = (IPhysicalFile)
dataSet.findMember(MEMBER_NAME);
if (resource != null) {
System.err.println("Resource " + MEMBER_NAME +
" already exists");
return;
}
그러면 다음과 같이 멤버가 작성됩니다. 해당 멤버를 참조하는 IPhysicalResource 오브젝트가 ZOSPhysicalResourceFactory 클래스의 getPhysicalResource 메소드를 사용하여 작성됩니다. (getPhysicalResource 메소드가 리턴한 자원 오브젝트는 기존의 실제 호스트 자원을 나타내지 않아도 됩니다.) IPhysicalResource가 작성되면 create 메소드를 호출하여 호스트에 실제 멤버를 작성할 수 있습니다.
ZOSPhysicalResourceFactory factory =
ZOSPhysicalResourceFactory.eINSTANCE;
resource = (IPhysicalFile) factory.getPhysicalResource(dataSet,
ZOSDataSetMember.class, MEMBER_NAME);
try {
resource.create(
new ByteArrayInputStream(MEMBER_CONTENT.getBytes()),
true, null);
} catch (OperationFailedException e) {
......
}
create 메소드에는 작성할 파일의 컨텐츠가 포함된 InputStream이 필요합니다.
MVS 하위 프로젝트에서 데이터 세트 멤버 작성 프로세스와 비슷합니다. CreateMemberAction 샘플 클래스의 createLogicalMember 메소드를 고려하십시오. 이 코드는 getPhysicalResource 메소드를 사용하여 선택된 ILogicalResource가 참조하는 IPhysicalResource 오브젝트를 가져와서 시작됩니다.
IPhysicalContainer container = null;
if (dataSet.getState().isOnline()) {
container = (IPhysicalContainer) dataSet.
getPhysicalResource();
} else {
System.err.println("DataSet " + dataSet.getName() +
" should not be offline.");
return;
}
원격 액세스 API를 사용하여 오프라인 자원을 처리하는 기능은 아직 지원되지 않습니다.
그런 다음 데이터 세트 멤버 IPhysicalResource 작성에서와 같이 데이터 세트 멤버 IPhysicalResource 작성을 계속 진행합니다.
IPhysicalFile resource = (IPhysicalFile) factory.getPhysicalResource(
container, ZOSDataSetMember.class, MEMBER_NAME);
try {
resource.create(
new ByteArrayInputStream(MEMBER_CONTENT.getBytes()),
true, null);
} catch (OperationFailedException e) {
......
}
다음 코드 스니펫은 getSubProject method를 통해 가져온 하위 프로젝트에 자원을 추가합니다. 이 코드 스니펫은 LogicalResourceFactory 클래스를 사용하여 이 작업을 수행합니다. 이 방법을 통해 하위 프로젝트에 추가 메뉴 조치를 사용하여 실제 자원을 프로젝트에 추가할 수 있습니다.
ILogicalSubProject subProject = dataSet.getSubProject();
if (project != null && resource != null) {
LogicalResourceFactoryFactory.getSingleton().getLogicalResource(
subProject, resource);
}
이 예제는 Eclipse에서 선택사항 변경 이벤트에 대응하는 방법을 보여줍니다. CreateMemberAction 클래스는 ISelectionListener 인터페이스를 구현합니다. selectionChanged 메소드 구현은 IStructuredSelection을 참조하는 이벤트에 대응합니다. 일반적으로 이는 트리 네비게이터의 현재 선택사항이 변경되면 발생합니다. 예제 코드는 현재 선택사항과 연관된 반복자를 사용하여 현재 선택사항에 포함된 항목을 반복합니다. 이 예제에서, 첫 번째 선택된 항목이 선택됩니다.
selectedItem = null;
if (selection instanceof IStructuredSelection) {
IStructuredSelection currentSelection =
(IStructuredSelection) selection;
Iterator iterator = currentSelection.iterator();
while (iterator.hasNext()) {
Object item = iterator.next();
if (item instanceof LZOSPartitionedDataSet) {
selectedItem = item;
break;
} else if (item instanceof ZOSResourceReference) {
item = ((ZOSResourceReference) item).getReferent();
if (item instanceof ZOSPartitionedDataSet) {
selectedItem = item;
break;
}
}
}
}
z/OS® 프로젝트의 오브젝트가 선택되면 ILogicalResource 오브젝트(이 경우 LZOSPartitionedDataSet)가 selection 오브젝트에 리턴됩니다. 원격 시스템 탐색기 보기에서 MVS 파일 시스템의 오브젝트가 선택되면 ZOSResourceReference가 리턴됩니다. 후자의 경우, getReferent 메소드를 사용하여 해당 IPhysicalResource를 검색할 수 있습니다.