001    package org.gwtbootstrap3.extras.fullcalendar.client.ui;
002    
003    /*
004     * #%L
005     * GwtBootstrap3
006     * %%
007     * Copyright (C) 2013 - 2014 GwtBootstrap3
008     * %%
009     * Licensed under the Apache License, Version 2.0 (the "License");
010     * you may not use this file except in compliance with the License.
011     * You may obtain a copy of the License at
012     * 
013     *      http://www.apache.org/licenses/LICENSE-2.0
014     * 
015     * Unless required by applicable law or agreed to in writing, software
016     * distributed under the License is distributed on an "AS IS" BASIS,
017     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
018     * See the License for the specific language governing permissions and
019     * limitations under the License.
020     * #L%
021     */
022    
023    import com.google.gwt.core.client.JavaScriptObject;
024    import com.google.gwt.core.client.ScriptInjector;
025    import org.gwtbootstrap3.extras.fullcalendar.client.FullCalendarClientBundle;
026    
027    /**
028     * Models the Event Source Object
029     *
030     * @author Jeff Isenhart
031     * @see http://arshaw.com/fullcalendar/docs/event_data/Event_Source_Object/
032     */
033    public class EventSource implements IsJavaScriptObject {
034    
035        private static boolean GCAL_ADDED = false;
036        private JavaScriptObject eventSource;
037    
038        public EventSource(final JavaScriptObject jso) {
039            eventSource = jso;
040        }
041    
042        public EventSource(final String url,
043                           final String color,
044                           final String backgroundColor,
045                           final String textColor,
046                           final String borderColor,
047                           final String className,
048                           final boolean isEditable,
049                           final boolean isStartEditable,
050                           final boolean isDurationEditable,
051                           final boolean allDayDefault,
052                           final boolean ignoreTimeZone,
053                           final boolean isGoogle//if true include google script file
054        ) {
055            if (isGoogle && !GCAL_ADDED) {
056                GCAL_ADDED = true;
057                ScriptInjector.fromString(FullCalendarClientBundle.INSTANCE.getGoogleCalJS().getText()).setWindow(ScriptInjector.TOP_WINDOW).inject();
058            }
059            newEvent(url, color, backgroundColor, textColor, borderColor, className, isEditable, isStartEditable, isDurationEditable, allDayDefault, ignoreTimeZone);
060        }
061    
062        private native void newEvent(String url,
063                                     String color,
064                                     String backgroundColor,
065                                     String textColor,
066                                     String borderColor,
067                                     String className,
068                                     boolean isEditable,
069                                     boolean isStartEditable,
070                                     boolean isDurationEditable,
071                                     boolean allDayDefault,
072                                     boolean ignoreTimeZone
073        ) /*-{
074            var theInstance = this;
075            theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource = {
076                url: url,
077                color: color,
078                backgroundColor: backgroundColor,
079                textColor: textColor,
080                borderColor: borderColor,
081                className: className,
082                editable: isEditable,
083                startEditable: isStartEditable,
084                durationEditable: isDurationEditable,
085                allDayDefault: allDayDefault,
086                ignoreTimeZone: ignoreTimeZone
087            };
088        }-*/;
089    
090        public native void setEventDataTransform(EventDataTransformCallback callback) /*-{
091            var theInstance = this;
092            theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.eventTransform = function (eventData) {
093                if (callback) {
094                    callback.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventDataTransformCallback::eventData(Lcom/google/gwt/core/client/JavaScriptObject;)(eventData);
095                }
096            }
097        }-*/;
098    
099        public native String getUrl() /*-{
100            var theInstance = this;
101            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.url;
102        }-*/;
103    
104        public native String getColor() /*-{
105            var theInstance = this;
106            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.color;
107        }-*/;
108    
109        public native String getBackgroundColor() /*-{
110            var theInstance = this;
111            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.backgroundColor;
112        }-*/;
113    
114        public native String getTextColor() /*-{
115            var theInstance = this;
116            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.textColor;
117        }-*/;
118    
119        public native String getBorderColor() /*-{
120            var theInstance = this;
121            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.borderColor;
122        }-*/;
123    
124        public native String getClassName() /*-{
125            var theInstance = this;
126            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.className;
127        }-*/;
128    
129        public native boolean getIsEditable() /*-{
130            var theInstance = this;
131            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.editable;
132        }-*/;
133    
134        public native boolean getStartEditable() /*-{
135            var theInstance = this;
136            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.startEditable;
137        }-*/;
138    
139        public native boolean getDurationEditable() /*-{
140            var theInstance = this;
141            if (theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.durationEditable) {
142                return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.durationEditable;
143            }
144            return false;
145        }-*/;
146    
147        public native boolean isAllDayDefault() /*-{
148            var theInstance = this;
149            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.allDayDefault;
150        }-*/;
151    
152        public native boolean ignoreTimeZone() /*-{
153            var theInstance = this;
154            return theInstance.@org.gwtbootstrap3.extras.fullcalendar.client.ui.EventSource::eventSource.ignoreTimeZone;
155        }-*/;
156    
157        @Override
158        public JavaScriptObject toJavaScript() {
159            return this.eventSource;
160        }
161    }