Skip to content

Commit

Permalink
Merge branch 'feature/IJMP-1854' into 'release/v2.1.0'
Browse files Browse the repository at this point in the history
IJMP-1854 - final commit for create dataset window

See merge request ijmp/for-mainframe!595
  • Loading branch information
Uladzislau Kalesnikau committed Oct 25, 2024
2 parents 97be3b2 + 1bb3c7c commit 451b790
Show file tree
Hide file tree
Showing 6 changed files with 563 additions and 226 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,29 +76,41 @@ class DatasetAllocator : Allocator<DatasetAllocationOperation> {
if (operation.request.presets != Presets.CUSTOM_DATASET
&& operation.request.presets != Presets.SEQUENTIAL_DATASET
&& operation.request.presets != Presets.PDS_DATASET
&& operation.request.presets != Presets.PDSE_DATASET
) {
// Allocate member
var throwable: Throwable? = null
runCatching {
val contentToWrite = if (
operation.request.presets == Presets.PDS_WITH_EMPTY_MEMBER
|| operation.request.presets == Presets.PDSE_WITH_EMPTY_MEMBER
) {
byteArrayOf()
} else {
getSampleJclMemberContent(CredentialService.getUsername(operation.connectionConfig))
.encodeToByteArray()
}
val memberResponse = apiWithBytesConverter<DataAPI>(operation.connectionConfig).writeToDatasetMember(
authorizationToken = operation.connectionConfig.authToken,
datasetName = operation.request.datasetName,
memberName = operation.request.memberName,
content = if (operation.request.presets == Presets.PDS_WITH_EMPTY_MEMBER) {
byteArrayOf()
} else {
getSampleJclMemberContent(CredentialService.getUsername(operation.connectionConfig))
.encodeToByteArray()
}
content = contentToWrite
).cancelByIndicator(progressIndicator).execute()
if (!memberResponse.isSuccessful) {
throwable = CallException(
memberResponse,
"Cannot create sample member ${operation.request.memberName} in ${operation.request.datasetName} " +
"on ${operation.connectionConfig.name}"
"on ${operation.connectionConfig.name}"
)
throw throwable as CallException
}
}
.onFailure {
// Suppressed as the compiler does not correctly recognize the throwable state change
@Suppress("KotlinConstantConditions")
if (throwable != null) throw Throwable(cause = throwable)
else throw Exception("Error allocating a new sample member ${operation.request.memberName}")
}
}.onFailure { if (throwable != null) throw Throwable(cause = throwable) else throw Exception("Error allocating a new sample member ${operation.request.memberName}") }
}
}
}
Expand Down
97 changes: 58 additions & 39 deletions src/main/kotlin/eu/ibagroup/formainframe/explorer/config/Presets.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ enum class Presets(private val type: String) {
SEQUENTIAL_DATASET("Sequential Dataset"),
PDS_DATASET("PDS Dataset"),
PDS_WITH_EMPTY_MEMBER("PDS with empty member Dataset"),
PDS_WITH_SAMPLE_JCL_MEMBER("PDS with sample JCL member Dataset");
PDS_WITH_SAMPLE_JCL_MEMBER("PDS with sample JCL member Dataset"),
PDSE_DATASET("PDSE Dataset"),
PDSE_WITH_EMPTY_MEMBER("PDSE with empty member Dataset"),
PDSE_WITH_SAMPLE_JCL_MEMBER("PDSE with sample JCL member Dataset");

override fun toString(): String {
return type
Expand All @@ -41,7 +44,8 @@ enum class Presets(private val type: String) {
return when (preset) {
CUSTOM_DATASET -> PresetCustomDataset()
SEQUENTIAL_DATASET -> PresetSeqDataset()
else -> PresetPdsDataset()
PDS_DATASET, PDS_WITH_EMPTY_MEMBER, PDS_WITH_SAMPLE_JCL_MEMBER -> PresetPdsDataset()
else -> PresetPdseDataset()
}
}
}
Expand All @@ -51,66 +55,81 @@ enum class Presets(private val type: String) {
* Interface which represents a preset default fields for a chosen data class
*/
interface PresetType {
val datasetOrganization : DatasetOrganization
val spaceUnit : AllocationUnit
val primaryAllocation : Int
val secondaryAllocation : Int
val directoryBlocks : Int
val recordFormat : RecordFormat
val recordLength : Int
val blockSize : Int
val averageBlockLength : Int
val datasetOrganization: DatasetOrganization
val spaceUnit: AllocationUnit
val primaryAllocation: Int
val secondaryAllocation: Int
val directoryBlocks: Int
val recordFormat: RecordFormat
val recordLength: Int
val blockSize: Int
val averageBlockLength: Int
}

/**
* Data class which represents a custom dataset
*/
data class PresetCustomDataset(
override val datasetOrganization : DatasetOrganization = DatasetOrganization.PS,
override val spaceUnit : AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation : Int = 0,
override val secondaryAllocation : Int = 0,
override val directoryBlocks : Int = 0,
override val recordFormat : RecordFormat = RecordFormat.FB,
override val recordLength : Int = 0,
override val blockSize : Int = 0,
override val averageBlockLength : Int = 0
override val datasetOrganization: DatasetOrganization = DatasetOrganization.PS,
override val spaceUnit: AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation: Int = 0,
override val secondaryAllocation: Int = 0,
override val directoryBlocks: Int = 0,
override val recordFormat: RecordFormat = RecordFormat.FB,
override val recordLength: Int = 0,
override val blockSize: Int = 0,
override val averageBlockLength: Int = 0
) : PresetType

/**
* Data class which represents a sequential dataset
*/
data class PresetSeqDataset(
override val datasetOrganization : DatasetOrganization = DatasetOrganization.PS,
override val spaceUnit : AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation : Int = 10,
override val secondaryAllocation : Int = 5,
override val directoryBlocks : Int = 0,
override val recordFormat : RecordFormat = RecordFormat.FB,
override val recordLength : Int = 80,
override val blockSize : Int = 8000,
override val averageBlockLength : Int = 0
override val datasetOrganization: DatasetOrganization = DatasetOrganization.PS,
override val spaceUnit: AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation: Int = 10,
override val secondaryAllocation: Int = 5,
override val directoryBlocks: Int = 0,
override val recordFormat: RecordFormat = RecordFormat.FB,
override val recordLength: Int = 80,
override val blockSize: Int = 8000,
override val averageBlockLength: Int = 0
) : PresetType

/**
* Data class which represents a PDS dataset
*/
data class PresetPdsDataset(
override val datasetOrganization : DatasetOrganization = DatasetOrganization.PO,
override val spaceUnit : AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation : Int = 100,
override val secondaryAllocation : Int = 40,
override val directoryBlocks : Int = 10,
override val recordFormat : RecordFormat = RecordFormat.FB,
override val recordLength : Int = 80,
override val blockSize : Int = 32000,
override val averageBlockLength : Int = 0,
override val datasetOrganization: DatasetOrganization = DatasetOrganization.PO,
override val spaceUnit: AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation: Int = 100,
override val secondaryAllocation: Int = 40,
override val directoryBlocks: Int = 10,
override val recordFormat: RecordFormat = RecordFormat.FB,
override val recordLength: Int = 80,
override val blockSize: Int = 32000,
override val averageBlockLength: Int = 0,
) : PresetType

/**
* Data class which represents a PDSE dataset
*/
data class PresetPdseDataset(
override val datasetOrganization: DatasetOrganization = DatasetOrganization.POE,
override val spaceUnit: AllocationUnit = AllocationUnit.TRK,
override val primaryAllocation: Int = 100,
override val secondaryAllocation: Int = 40,
override val directoryBlocks: Int = 10,
override val recordFormat: RecordFormat = RecordFormat.FB,
override val recordLength: Int = 80,
override val blockSize: Int = 32000,
override val averageBlockLength: Int = 0,
) : PresetType

/**
* Open function to get the content of the default JCL member
*/
fun getSampleJclMemberContent(defaultUser: String) : String {
fun getSampleJclMemberContent(defaultUser: String): String {
return "//* THE SAMPLE JOB WHICH DO NOTHING\n" +
"//MYJOB JOB MSGCLASS=A,MSGLEVEL=1,NOTIFY=${defaultUser}\n" +
"//*-------------------------------------------------------------------\n" +
Expand Down
Loading

0 comments on commit 451b790

Please sign in to comment.