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.party.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.party.server.control.PartyControl;
022import com.echothree.model.control.user.server.control.UserControl;
023import com.echothree.model.data.party.server.entity.DateTimeFormat;
024import com.echothree.model.data.party.server.entity.DateTimeFormatDetail;
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("date time format object")
033@GraphQLName("DateTimeFormat")
034public class DateTimeFormatObject
035        extends BaseEntityInstanceObject {
036    
037    private final DateTimeFormat dateTimeFormat; // Always Present
038    
039    public DateTimeFormatObject(DateTimeFormat dateTimeFormat) {
040        super(dateTimeFormat.getPrimaryKey());
041        
042        this.dateTimeFormat = dateTimeFormat;
043    }
044
045    private DateTimeFormatDetail dateTimeFormatDetail; // Optional, use getDateTimeFormatDetail()
046    
047    private DateTimeFormatDetail getDateTimeFormatDetail() {
048        if(dateTimeFormatDetail == null) {
049            dateTimeFormatDetail = dateTimeFormat.getLastDetail();
050        }
051        
052        return dateTimeFormatDetail;
053    }
054    
055    @GraphQLField
056    @GraphQLDescription("date time format name")
057    @GraphQLNonNull
058    public String getDateTimeFormatName() {
059        return getDateTimeFormatDetail().getDateTimeFormatName();
060    }
061
062    @GraphQLField
063    @GraphQLDescription("java short date format")
064    @GraphQLNonNull
065    public String getJavaShortDateFormat() {
066        return getDateTimeFormatDetail().getJavaShortDateFormat();
067    }
068    
069    @GraphQLField
070    @GraphQLDescription("java abbrev date format")
071    @GraphQLNonNull
072    public String getJavaAbbrevDateFormat() {
073        return getDateTimeFormatDetail().getJavaAbbrevDateFormat();
074    }
075    
076    @GraphQLField
077    @GraphQLDescription("java abbrev date format weekday")
078    @GraphQLNonNull
079    public String getJavaAbbrevDateFormatWeekday() {
080        return getDateTimeFormatDetail().getJavaAbbrevDateFormatWeekday();
081    }
082    
083    @GraphQLField
084    @GraphQLDescription("java long date format")
085    @GraphQLNonNull
086    public String getJavaLongDateFormat() {
087        return getDateTimeFormatDetail().getJavaLongDateFormat();
088    }
089    
090    @GraphQLField
091    @GraphQLDescription("java long date format weekday")
092    @GraphQLNonNull
093    public String getJavaLongDateFormatWeekday() {
094        return getDateTimeFormatDetail().getJavaLongDateFormatWeekday();
095    }
096    
097    @GraphQLField
098    @GraphQLDescription("java time format name")
099    @GraphQLNonNull
100    public String getJavaTimeFormat() {
101        return getDateTimeFormatDetail().getJavaTimeFormat();
102    }
103    
104    @GraphQLField
105    @GraphQLDescription("java time format seconds")
106    @GraphQLNonNull
107    public String getJavaTimeFormatSeconds() {
108        return getDateTimeFormatDetail().getJavaTimeFormatSeconds();
109    }
110    
111    @GraphQLField
112    @GraphQLDescription("unix short date format")
113    @GraphQLNonNull
114    public String getUnixShortDateFormat() {
115        return getDateTimeFormatDetail().getUnixShortDateFormat();
116    }
117    
118    @GraphQLField
119    @GraphQLDescription("unix abbrev date format")
120    @GraphQLNonNull
121    public String getUnixAbbrevDateFormat() {
122        return getDateTimeFormatDetail().getUnixAbbrevDateFormat();
123    }
124    
125    @GraphQLField
126    @GraphQLDescription("unix abbrev date format weekday")
127    @GraphQLNonNull
128    public String getUnixAbbrevDateFormatWeekday() {
129        return getDateTimeFormatDetail().getUnixAbbrevDateFormatWeekday();
130    }
131    
132    @GraphQLField
133    @GraphQLDescription("unix long date format")
134    @GraphQLNonNull
135    public String getUnixLongDateFormat() {
136        return getDateTimeFormatDetail().getUnixLongDateFormat();
137    }
138    
139    @GraphQLField
140    @GraphQLDescription("unix long date format weekday")
141    @GraphQLNonNull
142    public String getUnixLongDateFormatWeekday() {
143        return getDateTimeFormatDetail().getUnixLongDateFormatWeekday();
144    }
145    
146    @GraphQLField
147    @GraphQLDescription("unix time format")
148    @GraphQLNonNull
149    public String getUnixTimeFormat() {
150        return getDateTimeFormatDetail().getUnixTimeFormat();
151    }
152    
153    @GraphQLField
154    @GraphQLDescription("unix time format seconds")
155    @GraphQLNonNull
156    public String getUnixTimeFormatSeconds() {
157        return getDateTimeFormatDetail().getUnixTimeFormatSeconds();
158    }
159    
160    @GraphQLField
161    @GraphQLDescription("short date separator")
162    @GraphQLNonNull
163    public String getShortDateSeparator() {
164        return getDateTimeFormatDetail().getShortDateSeparator();
165    }
166    
167    @GraphQLField
168    @GraphQLDescription("time separator")
169    @GraphQLNonNull
170    public String getTimeSeparator() {
171        return getDateTimeFormatDetail().getTimeSeparator();
172    }
173    
174    @GraphQLField
175    @GraphQLDescription("is default")
176    @GraphQLNonNull
177    public boolean getIsDefault() {
178        return getDateTimeFormatDetail().getIsDefault();
179    }
180    
181    @GraphQLField
182    @GraphQLDescription("sort order")
183    @GraphQLNonNull
184    public int getSortOrder() {
185        return getDateTimeFormatDetail().getSortOrder();
186    }
187    
188    @GraphQLField
189    @GraphQLDescription("description")
190    @GraphQLNonNull
191    public String getDescription(final DataFetchingEnvironment env) {
192        var partyControl = Session.getModelController(PartyControl.class);
193        var userControl = Session.getModelController(UserControl.class);
194
195        return partyControl.getBestDateTimeFormatDescription(dateTimeFormat, userControl.getPreferredLanguageFromUserVisit(BaseGraphQl.getUserVisit(env)));
196    }
197    
198}