001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.model.control.sequence.server.graphql; 018 019import com.echothree.model.control.graphql.server.graphql.BaseEntityInstanceObject; 020import com.echothree.model.control.graphql.server.util.BaseGraphQl; 021import com.echothree.model.control.sequence.server.control.SequenceControl; 022import com.echothree.model.control.user.server.control.UserControl; 023import com.echothree.model.data.sequence.server.entity.Sequence; 024import com.echothree.model.data.sequence.server.entity.SequenceDetail; 025import com.echothree.util.server.persistence.Session; 026import graphql.annotations.annotationTypes.GraphQLDescription; 027import graphql.annotations.annotationTypes.GraphQLField; 028import graphql.annotations.annotationTypes.GraphQLName; 029import graphql.annotations.annotationTypes.GraphQLNonNull; 030import graphql.schema.DataFetchingEnvironment; 031 032@GraphQLDescription("sequence object") 033@GraphQLName("Sequence") 034public class SequenceObject 035 extends BaseEntityInstanceObject { 036 037 private final Sequence sequence; // Always Present 038 039 public SequenceObject(Sequence sequence) { 040 super(sequence.getPrimaryKey()); 041 042 this.sequence = sequence; 043 } 044 045 private SequenceDetail sequenceDetail; // Optional, sequence getSequenceDetail() 046 047 private SequenceDetail getSequenceDetail() { 048 if(sequenceDetail == null) { 049 sequenceDetail = sequence.getLastDetail(); 050 } 051 052 return sequenceDetail; 053 } 054 055 @GraphQLField 056 @GraphQLDescription("sequence type") 057 public SequenceTypeObject getSequenceType(final DataFetchingEnvironment env) { 058 return SequenceSecurityUtils.getHasSequenceTypeAccess(env) ? new SequenceTypeObject(getSequenceDetail().getSequenceType()) : null; 059 } 060 061 @GraphQLField 062 @GraphQLDescription("sequence name") 063 public String getSequenceName() { 064 return getSequenceDetail().getSequenceName(); 065 } 066 067 @GraphQLField 068 @GraphQLDescription("mask") 069 public String getMask() { 070 return getSequenceDetail().getMask(); 071 } 072 073 @GraphQLField 074 @GraphQLDescription("chunk size") 075 @GraphQLNonNull 076 public int getChunkSize() { 077 return getSequenceDetail().getChunkSize(); 078 } 079 080 @GraphQLField 081 @GraphQLDescription("is default") 082 @GraphQLNonNull 083 public boolean getIsDefault() { 084 return getSequenceDetail().getIsDefault(); 085 } 086 087 @GraphQLField 088 @GraphQLDescription("sort order") 089 @GraphQLNonNull 090 public int getSortOrder() { 091 return getSequenceDetail().getSortOrder(); 092 } 093 094 @GraphQLField 095 @GraphQLDescription("value") 096 public String getValue() { 097 var sequenceControl = Session.getModelController(SequenceControl.class); 098 099 return sequenceControl.getSequenceValue(sequence).getValue(); 100 } 101 102 @GraphQLField 103 @GraphQLDescription("description") 104 @GraphQLNonNull 105 public String getDescription(final DataFetchingEnvironment env) { 106 var sequenceControl = Session.getModelController(SequenceControl.class); 107 var userControl = Session.getModelController(UserControl.class); 108 109 return sequenceControl.getBestSequenceDescription(sequence, userControl.getPreferredLanguageFromUserVisit(BaseGraphQl.getUserVisit(env))); 110 } 111 112}