package gwt.material.design.client.base.mixin;

/*
 * #%L
 * GwtMaterial
 * %%
 * Copyright (C) 2015 - 2016 GwtMaterialDesign
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */


import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import gwt.material.design.client.base.HasInitialClass;

/**
 * @author kevzlou7979
 */
public class InitialClassMixin<T extends UIObject & HasInitialClass> extends AbstractMixin<T> implements HasInitialClass {

    private String[] initialClass;

    public InitialClassMixin(final T uiObject) {
        super(uiObject);
    }


    @Override
    public void setInitialClass(final String... initialClass) {
        this.initialClass = initialClass;
        ((Widget)uiObject).addAttachHandler(new AttachEvent.Handler() {
            @Override
            public void onAttachOrDetach(AttachEvent event) {

                for(String s : initialClass) {
                    if(initialClass != null && !s.isEmpty()) {
                        uiObject.removeStyleName(s);
                    }
                    if(event.isAttached()){
                        if(initialClass != null && !s.isEmpty()) {
                            uiObject.addStyleName(s);
                        }
                    }
                }
            }
        });
    }


    @Override
    public String[] getInitialClass() {
        return initialClass;
    }
}

@@ -1290,24 +1290,74 @@
 itialClass;%0A
+        if(!((Widget)uiObject).isAttached())%7B%0A    
         ((Wi
@@ -1424,24 +1424,28 @@
             
+    
 @Override%0A  
@@ -1438,24 +1438,28 @@
   @Override%0A
+    
             
@@ -1525,16 +1525,20 @@
         
+    
 for(Stri
@@ -1552,32 +1552,36 @@
 initialClass) %7B%0A
+    
                 
@@ -1643,32 +1643,36 @@
                 
+    
 uiObject.removeS
@@ -1696,34 +1696,42 @@
                 
+   
+ 
 %7D%0A
+    
                 
@@ -1750,32 +1750,36 @@
 .isAttached())%7B%0A
+    
                 
@@ -1849,32 +1849,36 @@
                 
+    
 uiObject.addStyl
@@ -1879,32 +1879,62 @@
 ddStyleName(s);%0A
+                            %7D%0A
                 
@@ -1988,32 +1988,34 @@
  %7D%0A            %7D
+);
 %0A        %7D);%0A   
@@ -2004,26 +2004,24 @@
 );%0A        %7D
-);
 %0A    %7D%0A%0A%0A   

Check if the widget is attached to avoid multiple setter.